Patch fixes

This commit is contained in:
Cryptite
2024-12-09 09:23:05 -06:00
parent e421cf78bb
commit 039dc701e2
5 changed files with 73 additions and 5 deletions

View File

@@ -19,6 +19,19 @@ index edef8fc62f8dba1b57214d8d7d805ff0d83f4114..c948eb36db7f902ce65523e19651057e
} }
private static boolean isCatSittingOnChest(LevelAccessor world, BlockPos pos) { 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<EnderChestBlockEntity> 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 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 index f45ee675a10729845bf376fa95e648b23b9aac12..bb59827851262051bc832f32bf54877b6a896990 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftEnderChest.java --- a/src/main/java/org/bukkit/craftbukkit/block/CraftEnderChest.java

View File

@@ -25,8 +25,36 @@ index 830bd76916e26a3a54954d3cf7b7520af52a2258..dc9c7a844c2aee1dae80006eafe085c6
private ClientboundSetEquipmentPacket(RegistryFriendlyByteBuf buf) { private ClientboundSetEquipmentPacket(RegistryFriendlyByteBuf buf) {
this.entity = buf.readVarInt(); this.entity = buf.readVarInt();
this.slots = Lists.newArrayList(); 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<Pair<EquipmentSlot, ItemStack>> 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 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 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/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 { @@ -298,6 +298,11 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -49,7 +77,34 @@ index f36a075dbee2b96d01899e02460b1d8443e91749..34a650a3a884b9f85d369d1ef2b03cbe
this.handleEquipmentChanges(map); 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) { public static record Fallsounds(SoundEvent small, SoundEvent big) {
} }

View File

@@ -119,10 +119,10 @@ index 0f99733660f91280e4c6262cf75b3c9cae86f65a..8845497071ca3be0e439b454f1f2d14f
public static record DataValue<T>(int id, EntityDataSerializer<T> serializer, T value) { public static record DataValue<T>(int id, EntityDataSerializer<T> 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 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 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java
+++ b/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) { if (list != null) {
this.trackedDataValues = datawatcher.getNonDefaultValues(); this.trackedDataValues = datawatcher.getNonDefaultValues();
@@ -171,7 +171,7 @@ index 551da84c834132d106457c123e1b195e4be904b8..e4041c58a23d3eaefd01402635f71440
public void startAutoSpinAttack(int riptideTicks, float riptideAttackDamage, ItemStack stack) { 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 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 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/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 { @@ -2864,7 +2864,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {