CraftBukkit/nms-patches/net/minecraft/core/cauldron/CauldronInteraction.patch
2024-10-23 02:15:00 +11:00

193 lines
11 KiB
Diff

--- 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<String, CauldronInteraction.a> INTERACTIONS = new Object2ObjectArrayMap();
- Codec<CauldronInteraction.a> CODEC;
- CauldronInteraction.a EMPTY;
- CauldronInteraction.a WATER;
- CauldronInteraction.a LAVA;
- CauldronInteraction.a POWDER_SNOW;
+ // CraftBukkit start - decompile errors
+ Codec<CauldronInteraction.a> 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<Item, CauldronInteraction> 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<Item, CauldronInteraction> map) {