--- a/net/minecraft/core/cauldron/CauldronInteraction.java +++ b/net/minecraft/core/cauldron/CauldronInteraction.java @@ -36,14 +36,20 @@ import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.level.material.Fluid; +// CraftBukkit start +import org.bukkit.event.block.CauldronLevelChangeEvent; +// CraftBukkit end + public interface CauldronInteraction { Map INTERACTIONS = new Object2ObjectArrayMap(); - Codec CODEC; - CauldronInteraction.a EMPTY; - CauldronInteraction.a WATER; - CauldronInteraction.a LAVA; - CauldronInteraction.a POWDER_SNOW; + // CraftBukkit start - decompile errors + Codec CODEC = Codec.stringResolver(CauldronInteraction.a::name, CauldronInteraction.INTERACTIONS::get); + CauldronInteraction.a EMPTY = newInteractionMap("empty"); + CauldronInteraction.a WATER = newInteractionMap("water"); + CauldronInteraction.a LAVA = newInteractionMap("lava"); + CauldronInteraction.a POWDER_SNOW = newInteractionMap("powder_snow"); + // CraftBukkit end static CauldronInteraction.a newInteractionMap(String s) { Object2ObjectOpenHashMap object2objectopenhashmap = new Object2ObjectOpenHashMap(); @@ -68,12 +74,17 @@ if (potioncontents != null && potioncontents.is(Potions.WATER)) { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.changeLevel(iblockdata, world, blockposition, Blocks.WATER_CAULDRON.defaultBlockState(), entityhuman, CauldronLevelChangeEvent.ChangeReason.BOTTLE_EMPTY)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end Item item = itemstack.getItem(); entityhuman.setItemInHand(enumhand, ItemLiquidUtil.createFilledResult(itemstack, entityhuman, new ItemStack(Items.GLASS_BOTTLE))); entityhuman.awardStat(StatisticList.USE_CAULDRON); entityhuman.awardStat(StatisticList.ITEM_USED.get(item)); - world.setBlockAndUpdate(blockposition, Blocks.WATER_CAULDRON.defaultBlockState()); + // world.setBlockAndUpdate(blockposition, Blocks.WATER_CAULDRON.defaultBlockState()); // CraftBukkit world.playSound((EntityHuman) null, blockposition, SoundEffects.BOTTLE_EMPTY, SoundCategory.BLOCKS, 1.0F, 1.0F); world.gameEvent((Entity) null, (Holder) GameEvent.FLUID_PLACE, blockposition); } @@ -93,12 +104,17 @@ }); map1.put(Items.GLASS_BOTTLE, (iblockdata, world, blockposition, entityhuman, enumhand, itemstack) -> { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.lowerFillLevel(iblockdata, world, blockposition, entityhuman, CauldronLevelChangeEvent.ChangeReason.BOTTLE_FILL)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end Item item = itemstack.getItem(); entityhuman.setItemInHand(enumhand, ItemLiquidUtil.createFilledResult(itemstack, entityhuman, PotionContents.createItemStack(Items.POTION, Potions.WATER))); entityhuman.awardStat(StatisticList.USE_CAULDRON); entityhuman.awardStat(StatisticList.ITEM_USED.get(item)); - LayeredCauldronBlock.lowerFillLevel(iblockdata, world, blockposition); + // LayeredCauldronBlock.lowerFillLevel(iblockdata, world, blockposition); // CraftBukkit world.playSound((EntityHuman) null, blockposition, SoundEffects.BOTTLE_FILL, SoundCategory.BLOCKS, 1.0F, 1.0F); world.gameEvent((Entity) null, (Holder) GameEvent.FLUID_PICKUP, blockposition); } @@ -113,10 +129,15 @@ if (potioncontents != null && potioncontents.is(Potions.WATER)) { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.changeLevel(iblockdata, world, blockposition, iblockdata.cycle(LayeredCauldronBlock.LEVEL), entityhuman, CauldronLevelChangeEvent.ChangeReason.BOTTLE_EMPTY)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end entityhuman.setItemInHand(enumhand, ItemLiquidUtil.createFilledResult(itemstack, entityhuman, new ItemStack(Items.GLASS_BOTTLE))); entityhuman.awardStat(StatisticList.USE_CAULDRON); entityhuman.awardStat(StatisticList.ITEM_USED.get(itemstack.getItem())); - world.setBlockAndUpdate(blockposition, (IBlockData) iblockdata.cycle(LayeredCauldronBlock.LEVEL)); + // world.setBlockAndUpdate(blockposition, (IBlockData) iblockdata.cycle(LayeredCauldronBlock.LEVEL)); // CraftBukkit world.playSound((EntityHuman) null, blockposition, SoundEffects.BOTTLE_EMPTY, SoundCategory.BLOCKS, 1.0F, 1.0F); world.gameEvent((Entity) null, (Holder) GameEvent.FLUID_PLACE, blockposition); } @@ -194,12 +215,17 @@ return EnumInteractionResult.TRY_WITH_EMPTY_HAND; } else { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.changeLevel(iblockdata, world, blockposition, Blocks.CAULDRON.defaultBlockState(), entityhuman, CauldronLevelChangeEvent.ChangeReason.BUCKET_FILL)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end Item item = itemstack.getItem(); entityhuman.setItemInHand(enumhand, ItemLiquidUtil.createFilledResult(itemstack, entityhuman, itemstack1)); entityhuman.awardStat(StatisticList.USE_CAULDRON); entityhuman.awardStat(StatisticList.ITEM_USED.get(item)); - world.setBlockAndUpdate(blockposition, Blocks.CAULDRON.defaultBlockState()); + // world.setBlockAndUpdate(blockposition, Blocks.CAULDRON.defaultBlockState()); // CraftBukkit world.playSound((EntityHuman) null, blockposition, soundeffect, SoundCategory.BLOCKS, 1.0F, 1.0F); world.gameEvent((Entity) null, (Holder) GameEvent.FLUID_PICKUP, blockposition); } @@ -210,12 +236,17 @@ static EnumInteractionResult emptyBucket(World world, BlockPosition blockposition, EntityHuman entityhuman, EnumHand enumhand, ItemStack itemstack, IBlockData iblockdata, SoundEffect soundeffect) { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.changeLevel(iblockdata, world, blockposition, iblockdata, entityhuman, CauldronLevelChangeEvent.ChangeReason.BUCKET_EMPTY)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end Item item = itemstack.getItem(); entityhuman.setItemInHand(enumhand, ItemLiquidUtil.createFilledResult(itemstack, entityhuman, new ItemStack(Items.BUCKET))); entityhuman.awardStat(StatisticList.FILL_CAULDRON); entityhuman.awardStat(StatisticList.ITEM_USED.get(item)); - world.setBlockAndUpdate(blockposition, iblockdata); + // world.setBlockAndUpdate(blockposition, iblockdata); // CraftBukkit world.playSound((EntityHuman) null, blockposition, soundeffect, SoundCategory.BLOCKS, 1.0F, 1.0F); world.gameEvent((Entity) null, (Holder) GameEvent.FLUID_PLACE, blockposition); } @@ -242,11 +273,16 @@ return EnumInteractionResult.TRY_WITH_EMPTY_HAND; } else { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.lowerFillLevel(iblockdata, world, blockposition, entityhuman, CauldronLevelChangeEvent.ChangeReason.SHULKER_WASH)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end ItemStack itemstack1 = itemstack.transmuteCopy(Blocks.SHULKER_BOX, 1); entityhuman.setItemInHand(enumhand, ItemLiquidUtil.createFilledResult(itemstack, entityhuman, itemstack1, false)); entityhuman.awardStat(StatisticList.CLEAN_SHULKER_BOX); - LayeredCauldronBlock.lowerFillLevel(iblockdata, world, blockposition); + // LayeredCauldronBlock.lowerFillLevel(iblockdata, world, blockposition); // CraftBukkit } return EnumInteractionResult.SUCCESS; @@ -260,12 +296,17 @@ return EnumInteractionResult.TRY_WITH_EMPTY_HAND; } else { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.lowerFillLevel(iblockdata, world, blockposition, entityhuman, CauldronLevelChangeEvent.ChangeReason.BANNER_WASH)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end ItemStack itemstack1 = itemstack.copyWithCount(1); itemstack1.set(DataComponents.BANNER_PATTERNS, bannerpatternlayers.removeLast()); entityhuman.setItemInHand(enumhand, ItemLiquidUtil.createFilledResult(itemstack, entityhuman, itemstack1, false)); entityhuman.awardStat(StatisticList.CLEAN_BANNER); - LayeredCauldronBlock.lowerFillLevel(iblockdata, world, blockposition); + // LayeredCauldronBlock.lowerFillLevel(iblockdata, world, blockposition); // CraftBukkit } return EnumInteractionResult.SUCCESS; @@ -279,9 +320,14 @@ return EnumInteractionResult.TRY_WITH_EMPTY_HAND; } else { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.lowerFillLevel(iblockdata, world, blockposition, entityhuman, CauldronLevelChangeEvent.ChangeReason.ARMOR_WASH)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end itemstack.remove(DataComponents.DYED_COLOR); entityhuman.awardStat(StatisticList.CLEAN_ARMOR); - LayeredCauldronBlock.lowerFillLevel(iblockdata, world, blockposition); + // LayeredCauldronBlock.lowerFillLevel(iblockdata, world, blockposition); // CraftBukkit } return EnumInteractionResult.SUCCESS; @@ -294,6 +340,8 @@ return fluid.is(TagsFluid.WATER); } + // CraftBukkit start - decompile errors + /* static { Function function = CauldronInteraction.a::name; Map map = CauldronInteraction.INTERACTIONS; @@ -305,6 +353,8 @@ LAVA = newInteractionMap("lava"); POWDER_SNOW = newInteractionMap("powder_snow"); } + */ + // CraftBukkit end public static record a(String name, Map map) {