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++;
}
}
}
Aggregations