--- a/net/minecraft/core/cauldron/CauldronInteraction.java +++ b/net/minecraft/core/cauldron/CauldronInteraction.java @@ -30,6 +30,10 @@ import net.minecraft.world.level.block.state.properties.IBlockState; import net.minecraft.world.level.gameevent.GameEvent; +// CraftBukkit start +import org.bukkit.event.block.CauldronLevelChangeEvent; +// CraftBukkit end + public interface CauldronInteraction { Map EMPTY = a(); @@ -52,6 +56,11 @@ return EnumInteractionResult.PASS; } else { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.decreaseLevel(iblockdata, world, blockposition, entityhuman, CauldronLevelChangeEvent.ChangeReason.SHULKER_WASH)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end ItemStack itemstack1 = new ItemStack(Blocks.SHULKER_BOX); if (itemstack.hasTag()) { @@ -60,7 +69,7 @@ entityhuman.a(enumhand, itemstack1); entityhuman.a(StatisticList.CLEAN_SHULKER_BOX); - LayeredCauldronBlock.e(iblockdata, world, blockposition); + // LayeredCauldronBlock.e(iblockdata, world, blockposition); // CraftBukkit } return EnumInteractionResult.a(world.isClientSide); @@ -71,6 +80,11 @@ return EnumInteractionResult.PASS; } else { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.decreaseLevel(iblockdata, world, blockposition, entityhuman, CauldronLevelChangeEvent.ChangeReason.BANNER_WASH)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end ItemStack itemstack1 = itemstack.cloneItemStack(); itemstack1.setCount(1); @@ -88,7 +102,7 @@ } entityhuman.a(StatisticList.CLEAN_BANNER); - LayeredCauldronBlock.e(iblockdata, world, blockposition); + // LayeredCauldronBlock.e(iblockdata, world, blockposition); // CraftBukkit } return EnumInteractionResult.a(world.isClientSide); @@ -106,9 +120,14 @@ return EnumInteractionResult.PASS; } else { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.decreaseLevel(iblockdata, world, blockposition, entityhuman, CauldronLevelChangeEvent.ChangeReason.ARMOR_WASH)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end idyeable.e_(itemstack); entityhuman.a(StatisticList.CLEAN_ARMOR); - LayeredCauldronBlock.e(iblockdata, world, blockposition); + // LayeredCauldronBlock.e(iblockdata, world, blockposition); // CraftBukkit } return EnumInteractionResult.a(world.isClientSide); @@ -117,7 +136,7 @@ }; static Object2ObjectOpenHashMap a() { - return (Object2ObjectOpenHashMap) SystemUtils.a((Object) (new Object2ObjectOpenHashMap()), (object2objectopenhashmap) -> { + return SystemUtils.a((new Object2ObjectOpenHashMap<>()), (object2objectopenhashmap) -> { // CraftBukkit - decompile error object2objectopenhashmap.defaultReturnValue((iblockdata, world, blockposition, entityhuman, enumhand, itemstack) -> { return EnumInteractionResult.PASS; }); @@ -133,12 +152,17 @@ return EnumInteractionResult.PASS; } else { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.changeLevel(iblockdata, world, blockposition, Blocks.WATER_CAULDRON.getBlockData(), entityhuman, CauldronLevelChangeEvent.ChangeReason.BOTTLE_EMPTY)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end Item item = itemstack.getItem(); entityhuman.a(enumhand, ItemLiquidUtil.a(itemstack, entityhuman, new ItemStack(Items.GLASS_BOTTLE))); entityhuman.a(StatisticList.USE_CAULDRON); entityhuman.b(StatisticList.ITEM_USED.b(item)); - world.setTypeUpdate(blockposition, Blocks.WATER_CAULDRON.getBlockData()); + // world.setTypeUpdate(blockposition, Blocks.WATER_CAULDRON.getBlockData()); // CraftBukkit world.playSound((EntityHuman) null, blockposition, SoundEffects.BOTTLE_EMPTY, SoundCategory.BLOCKS, 1.0F, 1.0F); world.a((Entity) null, GameEvent.FLUID_PLACE, blockposition); } @@ -154,12 +178,17 @@ }); CauldronInteraction.WATER.put(Items.GLASS_BOTTLE, (iblockdata, world, blockposition, entityhuman, enumhand, itemstack) -> { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.decreaseLevel(iblockdata, world, blockposition, entityhuman, CauldronLevelChangeEvent.ChangeReason.BOTTLE_FILL)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end Item item = itemstack.getItem(); entityhuman.a(enumhand, ItemLiquidUtil.a(itemstack, entityhuman, PotionUtil.a(new ItemStack(Items.POTION), Potions.WATER))); entityhuman.a(StatisticList.USE_CAULDRON); entityhuman.b(StatisticList.ITEM_USED.b(item)); - LayeredCauldronBlock.e(iblockdata, world, blockposition); + // LayeredCauldronBlock.e(iblockdata, world, blockposition); // CraftBukkit world.playSound((EntityHuman) null, blockposition, SoundEffects.BOTTLE_FILL, SoundCategory.BLOCKS, 1.0F, 1.0F); world.a((Entity) null, GameEvent.FLUID_PICKUP, blockposition); } @@ -169,10 +198,15 @@ CauldronInteraction.WATER.put(Items.POTION, (iblockdata, world, blockposition, entityhuman, enumhand, itemstack) -> { if ((Integer) iblockdata.get(LayeredCauldronBlock.LEVEL) != 3 && PotionUtil.d(itemstack) == Potions.WATER) { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.changeLevel(iblockdata, world, blockposition, iblockdata.a(LayeredCauldronBlock.LEVEL), entityhuman, CauldronLevelChangeEvent.ChangeReason.BOTTLE_EMPTY)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end entityhuman.a(enumhand, ItemLiquidUtil.a(itemstack, entityhuman, new ItemStack(Items.GLASS_BOTTLE))); entityhuman.a(StatisticList.USE_CAULDRON); entityhuman.b(StatisticList.ITEM_USED.b(itemstack.getItem())); - world.setTypeUpdate(blockposition, (IBlockData) iblockdata.a((IBlockState) LayeredCauldronBlock.LEVEL)); + // world.setTypeUpdate(blockposition, (IBlockData) iblockdata.a((IBlockState) LayeredCauldronBlock.LEVEL)); // CraftBukkit world.playSound((EntityHuman) null, blockposition, SoundEffects.BOTTLE_EMPTY, SoundCategory.BLOCKS, 1.0F, 1.0F); world.a((Entity) null, GameEvent.FLUID_PLACE, blockposition); } @@ -244,12 +278,17 @@ return EnumInteractionResult.PASS; } else { if (!world.isClientSide) { + // CraftBukkit start + if (!LayeredCauldronBlock.changeLevel(iblockdata, world, blockposition, Blocks.CAULDRON.getBlockData(), entityhuman, CauldronLevelChangeEvent.ChangeReason.BUCKET_FILL)) { + return EnumInteractionResult.SUCCESS; + } + // CraftBukkit end Item item = itemstack.getItem(); entityhuman.a(enumhand, ItemLiquidUtil.a(itemstack, entityhuman, itemstack1)); entityhuman.a(StatisticList.USE_CAULDRON); entityhuman.b(StatisticList.ITEM_USED.b(item)); - world.setTypeUpdate(blockposition, Blocks.CAULDRON.getBlockData()); + // world.setTypeUpdate(blockposition, Blocks.CAULDRON.getBlockData()); // CraftBukkit world.playSound((EntityHuman) null, blockposition, soundeffect, SoundCategory.BLOCKS, 1.0F, 1.0F); world.a((Entity) null, GameEvent.FLUID_PICKUP, blockposition); } @@ -260,12 +299,17 @@ static EnumInteractionResult a(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.a(enumhand, ItemLiquidUtil.a(itemstack, entityhuman, new ItemStack(Items.BUCKET))); entityhuman.a(StatisticList.FILL_CAULDRON); entityhuman.b(StatisticList.ITEM_USED.b(item)); - world.setTypeUpdate(blockposition, iblockdata); + // world.setTypeUpdate(blockposition, iblockdata); // CraftBukkit world.playSound((EntityHuman) null, blockposition, soundeffect, SoundCategory.BLOCKS, 1.0F, 1.0F); world.a((Entity) null, GameEvent.FLUID_PLACE, blockposition); }