Search in sources :

Example 1 with BrewingStand

use of org.spongepowered.api.block.entity.carrier.BrewingStand in project SpongeCommon by SpongePowered.

the class BrewingStandBlockEntityMixin method impl$callBrewEvents.

@Inject(method = "tick", locals = LocalCapture.CAPTURE_FAILEXCEPTION, slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/entity/BrewingStandBlockEntity;isBrewable()Z")), at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/entity/BrewingStandBlockEntity;setChanged()V"))
private void impl$callBrewEvents(CallbackInfo ci, ItemStack fuelStack, boolean isBrewable, boolean isBrewing, ItemStack ingredientStack) {
    final Cause currentCause = Sponge.server().causeStackManager().currentCause();
    if (isBrewing) {
        if (this.brewTime == 0 && isBrewable) {
            List<ItemStackSnapshot> stacks = new ArrayList<>();
            for (int i = 0; i < 3; ++i) {
                stacks.add(ItemStackUtil.snapshotOf(this.items.get(i)));
            }
            final BrewingEvent.Finish event = SpongeEventFactory.createBrewingEventFinish(currentCause, Collections.unmodifiableList(stacks), (BrewingStand) this, ItemStackUtil.snapshotOf(ingredientStack));
            Sponge.eventManager().post(event);
        } else if (!isBrewable || this.ingredient != ingredientStack.getItem()) {
            final BrewingEvent.Interrupt event = SpongeEventFactory.createBrewingEventInterrupt(currentCause, (BrewingStand) this, ItemStackUtil.snapshotOf(ingredientStack));
            Sponge.eventManager().post(event);
        }
    } else if (isBrewable && this.fuel > 0) {
        final BrewingEvent.Start event = SpongeEventFactory.createBrewingEventStart(currentCause, (BrewingStand) this, ItemStackUtil.snapshotOf(ingredientStack));
        if (Sponge.eventManager().post(event)) {
            this.brewTime = 0;
            this.ingredient = Items.AIR;
            this.fuel++;
        }
    }
}
Also used : BrewingEvent(org.spongepowered.api.event.block.entity.BrewingEvent) Cause(org.spongepowered.api.event.Cause) BrewingStand(org.spongepowered.api.block.entity.carrier.BrewingStand) ArrayList(java.util.ArrayList) ItemStackSnapshot(org.spongepowered.api.item.inventory.ItemStackSnapshot) Inject(org.spongepowered.asm.mixin.injection.Inject)

Aggregations

ArrayList (java.util.ArrayList)1 BrewingStand (org.spongepowered.api.block.entity.carrier.BrewingStand)1 Cause (org.spongepowered.api.event.Cause)1 BrewingEvent (org.spongepowered.api.event.block.entity.BrewingEvent)1 ItemStackSnapshot (org.spongepowered.api.item.inventory.ItemStackSnapshot)1 Inject (org.spongepowered.asm.mixin.injection.Inject)1