From 039dc701e298960a0772842a6c249fc08994f827 Mon Sep 17 00:00:00 2001 From: Cryptite Date: Mon, 9 Dec 2024 09:23:05 -0600 Subject: [PATCH] Patch fixes --- ...-Add-PlayerLoadStatsEvent-Fix-patch.patch} | 0 .../0007-Allow-opening-covered-chests.patch | 13 ++++ .../0014-Equipment-Packet-Caching.patch | 59 ++++++++++++++++++- ...020-Packet-obfuscation-and-reduction.patch | 6 +- ...-Add-PlayerLoadStatsEvent-Fix-patch.patch} | 0 5 files changed, 73 insertions(+), 5 deletions(-) rename patches/api/{0012-Add-PlayerLoadStatsEvent.patch => 0012-Add-PlayerLoadStatsEvent-Fix-patch.patch} (100%) rename patches/server/{0021-Add-PlayerLoadStatsEvent.patch => 0021-Add-PlayerLoadStatsEvent-Fix-patch.patch} (100%) diff --git a/patches/api/0012-Add-PlayerLoadStatsEvent.patch b/patches/api/0012-Add-PlayerLoadStatsEvent-Fix-patch.patch similarity index 100% rename from patches/api/0012-Add-PlayerLoadStatsEvent.patch rename to patches/api/0012-Add-PlayerLoadStatsEvent-Fix-patch.patch diff --git a/patches/server/0007-Allow-opening-covered-chests.patch b/patches/server/0007-Allow-opening-covered-chests.patch index a1682ade9..f30d32482 100644 --- a/patches/server/0007-Allow-opening-covered-chests.patch +++ b/patches/server/0007-Allow-opening-covered-chests.patch @@ -19,6 +19,19 @@ index edef8fc62f8dba1b57214d8d7d805ff0d83f4114..c948eb36db7f902ce65523e19651057e } private static boolean isCatSittingOnChest(LevelAccessor world, BlockPos pos) { +diff --git a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java +index 2a207fb2e1c26b562de42240e11c856bd2a23458..601746d00c1afd85ca8a0c5578ef587e6a231bcf 100644 +--- a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java ++++ b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java +@@ -83,7 +83,7 @@ public class EnderChestBlock extends AbstractChestBlock i + PlayerEnderChestContainer playerEnderChestContainer = player.getEnderChestInventory(); + if (playerEnderChestContainer != null && world.getBlockEntity(pos) instanceof EnderChestBlockEntity enderChestBlockEntity) { + BlockPos blockPos = pos.above(); +- if (world.getBlockState(blockPos).isRedstoneConductor(world, blockPos)) { // Paper - diff on change; make sure that EnderChest#isBlocked uses the same logic ++ if (false) { // Slice - allow block on top to not block opening // world.getBlockState(blockPos).isRedstoneConductor(world, blockPos)) { // Paper - diff on change; make sure that EnderChest#isBlocked uses the same logic + return InteractionResult.SUCCESS; + } else { + // Paper start - Fix InventoryOpenEvent cancellation - moved up; diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftEnderChest.java b/src/main/java/org/bukkit/craftbukkit/block/CraftEnderChest.java index f45ee675a10729845bf376fa95e648b23b9aac12..bb59827851262051bc832f32bf54877b6a896990 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftEnderChest.java diff --git a/patches/server/0014-Equipment-Packet-Caching.patch b/patches/server/0014-Equipment-Packet-Caching.patch index 8defce47d..0d673df5b 100644 --- a/patches/server/0014-Equipment-Packet-Caching.patch +++ b/patches/server/0014-Equipment-Packet-Caching.patch @@ -25,8 +25,36 @@ index 830bd76916e26a3a54954d3cf7b7520af52a2258..dc9c7a844c2aee1dae80006eafe085c6 private ClientboundSetEquipmentPacket(RegistryFriendlyByteBuf buf) { this.entity = buf.readVarInt(); this.slots = Lists.newArrayList(); +diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java +index 90eb4927fa51ce3df86aa7b6c71f49150a03e337..a6c3beb9d5ab87fca882e1761983ebe385011296 100644 +--- a/src/main/java/net/minecraft/server/level/ServerEntity.java ++++ b/src/main/java/net/minecraft/server/level/ServerEntity.java +@@ -388,22 +388,7 @@ public class ServerEntity { + Entity entity = this.entity; + + if (entity instanceof LivingEntity entityliving) { +- List> list = Lists.newArrayList(); +- Iterator iterator = EquipmentSlot.VALUES.iterator(); +- +- while (iterator.hasNext()) { +- EquipmentSlot enumitemslot = (EquipmentSlot) iterator.next(); +- ItemStack itemstack = entityliving.getItemBySlot(enumitemslot); +- +- if (!itemstack.isEmpty()) { +- list.add(Pair.of(enumitemslot, itemstack.copy())); +- } +- } +- +- if (!list.isEmpty()) { +- sender.accept(new ClientboundSetEquipmentPacket(this.entity.getId(), list, true)); // Paper - data sanitization +- } +- ((LivingEntity) this.entity).detectEquipmentUpdatesPublic(); // CraftBukkit - SPIGOT-3789: sync again immediately after sending ++ entityliving.sendEquipment(sender, player); + } + + if (!this.entity.getPassengers().isEmpty()) { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index f36a075dbee2b96d01899e02460b1d8443e91749..34a650a3a884b9f85d369d1ef2b03cbe328f5b63 100644 +index f36a075dbee2b96d01899e02460b1d8443e91749..0634626d4a0bda9ac58f1fd16265ca866ee9f5c3 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -298,6 +298,11 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -49,7 +77,34 @@ index f36a075dbee2b96d01899e02460b1d8443e91749..34a650a3a884b9f85d369d1ef2b03cbe this.handleEquipmentChanges(map); } } -@@ -4803,4 +4809,84 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3507,7 +3513,25 @@ public abstract class LivingEntity extends Entity implements Attackable { + } + + }); +- ((ServerLevel) this.level()).getChunkSource().broadcast(this, new ClientboundSetEquipmentPacket(this.getId(), list, true)); // Paper - data sanitization ++ ++ // Slice start ++ net.minecraft.server.level.ChunkMap.TrackedEntity entityTracker = ((ServerLevel) this.level()).getChunkSource().chunkMap.entityMap.get(getId()); ++ if (entityTracker != null) { ++ ClientboundSetEquipmentPacket packet = new ClientboundSetEquipmentPacket(this.getId(), list); ++ for (net.minecraft.server.network.ServerPlayerConnection playerConnection : entityTracker.seenBy) { ++ ServerPlayer player = playerConnection.getPlayer(); ++ org.bukkit.event.player.PlayerReceiveEquipmentEvent event = new org.bukkit.event.player.PlayerReceiveEquipmentEvent(player.getBukkitEntity(), getBukkitEntity()); ++ level().getCraftServer().getPluginManager().callEvent(event); ++ ++ String tag = event.getTag(); ++ if (tag != null) { ++ playerConnection.send(new ClientboundSetEquipmentPacket(this.getId(), list, this, false, tag)); ++ } else { ++ playerConnection.send(packet); ++ } ++ } ++ } ++ // Slice end + } + + private ItemStack getLastArmorItem(EquipmentSlot slot) { +@@ -4803,4 +4827,84 @@ public abstract class LivingEntity extends Entity implements Attackable { public static record Fallsounds(SoundEvent small, SoundEvent big) { } diff --git a/patches/server/0020-Packet-obfuscation-and-reduction.patch b/patches/server/0020-Packet-obfuscation-and-reduction.patch index 393364e6b..2f3efab40 100644 --- a/patches/server/0020-Packet-obfuscation-and-reduction.patch +++ b/patches/server/0020-Packet-obfuscation-and-reduction.patch @@ -119,10 +119,10 @@ index 0f99733660f91280e4c6262cf75b3c9cae86f65a..8845497071ca3be0e439b454f1f2d14f public static record DataValue(int id, EntityDataSerializer serializer, T value) { diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 90eb4927fa51ce3df86aa7b6c71f49150a03e337..357f1d375cd92ce73516c6baceffe8dd89b9e499 100644 +index a6c3beb9d5ab87fca882e1761983ebe385011296..112a8c0840ded4156782a6bab7550d4696b02c6f 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -449,7 +449,20 @@ public class ServerEntity { +@@ -434,7 +434,20 @@ public class ServerEntity { if (list != null) { this.trackedDataValues = datawatcher.getNonDefaultValues(); @@ -171,7 +171,7 @@ index 551da84c834132d106457c123e1b195e4be904b8..e4041c58a23d3eaefd01402635f71440 public void startAutoSpinAttack(int riptideTicks, float riptideAttackDamage, ItemStack stack) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index adf8f0ddde16f08b10cd733eeabf9d40db77001b..c92c59d18a218b8b34b94dca874291d0f95a678a 100644 +index 973726a3429498b19bf36915b2e84ff29a203704..b4d72cbcbb9caa10e07fc07278d85fdc87f40102 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -2864,7 +2864,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0021-Add-PlayerLoadStatsEvent.patch b/patches/server/0021-Add-PlayerLoadStatsEvent-Fix-patch.patch similarity index 100% rename from patches/server/0021-Add-PlayerLoadStatsEvent.patch rename to patches/server/0021-Add-PlayerLoadStatsEvent-Fix-patch.patch