174 lines
9.7 KiB
Diff
174 lines
9.7 KiB
Diff
--- 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<Item, CauldronInteraction> 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<Item, CauldronInteraction> 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);
|
|
}
|