From 7a29402e9ec7c2c62f833ebacc67a633f9062f9b Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Sun, 26 Feb 2023 10:54:58 +0800 Subject: [PATCH] Update upstream --- .../entity/BrewingStandBlockEntityMixin.java | 10 ++++++++ .../entity/CampfireBlockEntityMixin.java | 23 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/block/entity/BrewingStandBlockEntityMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/block/entity/BrewingStandBlockEntityMixin.java index 72fbe973..f014fa0a 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/block/entity/BrewingStandBlockEntityMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/block/entity/BrewingStandBlockEntityMixin.java @@ -17,14 +17,17 @@ import org.bukkit.craftbukkit.v.block.CraftBlock; import org.bukkit.craftbukkit.v.entity.CraftHumanEntity; import org.bukkit.craftbukkit.v.inventory.CraftItemStack; import org.bukkit.entity.HumanEntity; +import org.bukkit.event.block.BrewingStartEvent; import org.bukkit.event.inventory.BrewEvent; import org.bukkit.event.inventory.BrewingStandFuelEvent; import org.bukkit.inventory.BrewerInventory; import org.bukkit.inventory.InventoryHolder; +import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.ArrayList; @@ -55,6 +58,13 @@ public abstract class BrewingStandBlockEntityMixin extends LockableBlockEntityMi } } + @Inject(method = "serverTick", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/world/level/block/entity/BrewingStandBlockEntity;ingredient:Lnet/minecraft/world/item/Item;")) + private static void arclight$brewBegin(Level level, BlockPos pos, BlockState p_155288_, BrewingStandBlockEntity entity, CallbackInfo ci) { + var event = new BrewingStartEvent(CraftBlock.at(level, pos), CraftItemStack.asCraftMirror(entity.getItem(3)), entity.brewTime); + Bukkit.getPluginManager().callEvent(event); + entity.brewTime = event.getTotalBrewTime(); + } + /** * @author Izzel_Aliz * @reason diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/block/entity/CampfireBlockEntityMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/block/entity/CampfireBlockEntityMixin.java index fffc0523..6bd3ce4a 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/block/entity/CampfireBlockEntityMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/block/entity/CampfireBlockEntityMixin.java @@ -1,9 +1,11 @@ package io.izzel.arclight.common.mixin.core.world.level.block.entity; +import io.izzel.arclight.common.bridge.core.item.crafting.IRecipeBridge; import net.minecraft.core.BlockPos; import net.minecraft.world.Container; import net.minecraft.world.Containers; import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.Entity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.CampfireCookingRecipe; import net.minecraft.world.item.crafting.RecipeManager; @@ -15,16 +17,29 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v.block.CraftBlock; import org.bukkit.craftbukkit.v.inventory.CraftItemStack; import org.bukkit.event.block.BlockCookEvent; +import org.bukkit.event.block.CampfireStartEvent; +import org.bukkit.inventory.CampfireRecipe; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import java.util.Optional; @Mixin(CampfireBlockEntity.class) public abstract class CampfireBlockEntityMixin extends BlockEntityMixin { @Shadow @Final private RecipeManager.CachedCheck quickCheck; + @Shadow + public abstract Optional getCookableRecipe(ItemStack p_59052_); + + @Shadow @Final public int[] cookingTime; + /** * @author IzzelAliz * @reason @@ -71,4 +86,12 @@ public abstract class CampfireBlockEntityMixin extends BlockEntityMixin { } } + + @Inject(method = "placeFood", locals = LocalCapture.CAPTURE_FAILHARD, + at = @At(value = "FIELD", target = "Lnet/minecraft/world/level/block/entity/CampfireBlockEntity;cookingProgress:[I")) + private void arclight$cookStart(Entity p_238285_, ItemStack stack, int p_238287_, CallbackInfoReturnable cir, int i) { + var event = new CampfireStartEvent(CraftBlock.at(this.level, this.worldPosition), CraftItemStack.asCraftMirror(stack), (CampfireRecipe) ((IRecipeBridge) getCookableRecipe(stack).get()).bridge$toBukkitRecipe()); + Bukkit.getPluginManager().callEvent(event); + this.cookingTime[i] = event.getTotalCookTime(); + } }