2021-12-01 13:32:36 +01:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Noah van der Aa <ndvdaa@gmail.com>
|
|
|
|
Date: Tue, 3 Aug 2021 17:28:27 +0200
|
|
|
|
Subject: [PATCH] Hide unnecessary itemmeta from clients
|
|
|
|
|
2024-04-24 18:15:59 +02:00
|
|
|
TODO: Needs updating for data components
|
|
|
|
|
2021-12-01 13:32:36 +01:00
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java
|
2024-04-12 21:14:06 +02:00
|
|
|
index a51564e8dce3c125ed5f05cc23548a05c1e79a95..d2c2075fb0378fd7ec148281d37d886c77a78ce8 100644
|
2021-12-01 13:32:36 +01:00
|
|
|
--- a/src/main/java/net/minecraft/server/level/ServerEntity.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
|
2023-09-22 16:58:35 +02:00
|
|
|
@@ -337,7 +337,7 @@ public class ServerEntity {
|
2021-12-01 13:32:36 +01:00
|
|
|
if (!itemstack.isEmpty()) {
|
|
|
|
// Paper start - prevent oversized data
|
|
|
|
final ItemStack sanitized = LivingEntity.sanitizeItemStack(itemstack.copy(), false);
|
|
|
|
- list.add(Pair.of(enumitemslot, sanitized));
|
2024-01-18 22:00:40 +01:00
|
|
|
+ list.add(Pair.of(enumitemslot, ((LivingEntity) this.entity).stripMeta(sanitized, false))); // Paper - Hide unnecessary item meta
|
|
|
|
// Paper end - prevent oversized data
|
2021-12-01 13:32:36 +01:00
|
|
|
}
|
|
|
|
}
|
2022-08-14 10:03:13 +02:00
|
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
2024-04-23 19:02:08 +02:00
|
|
|
index 8fcb241e8d161c9fb024a2a0488f8c29784a74f1..7127c6f163cc00eb439eb37665df3e1a4bf27cc2 100644
|
2022-08-14 10:03:13 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
2024-02-22 17:23:15 +01:00
|
|
|
@@ -2565,8 +2565,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
2022-12-07 22:35:34 +01:00
|
|
|
// Refresh the current entity metadata
|
2023-10-27 01:34:58 +02:00
|
|
|
entity.getEntityData().refresh(ServerGamePacketListenerImpl.this.player);
|
2022-12-07 22:35:34 +01:00
|
|
|
// SPIGOT-7136 - Allays
|
|
|
|
- if (entity instanceof Allay) {
|
2023-10-27 01:34:58 +02:00
|
|
|
- ServerGamePacketListenerImpl.this.send(new ClientboundSetEquipmentPacket(entity.getId(), Arrays.stream(net.minecraft.world.entity.EquipmentSlot.values()).map((slot) -> Pair.of(slot, ((LivingEntity) entity).getItemBySlot(slot).copy())).collect(Collectors.toList())));
|
2024-01-18 22:00:40 +01:00
|
|
|
+ if (entity instanceof Allay allay) { // Paper - Hide unnecessary item meta
|
|
|
|
+ ServerGamePacketListenerImpl.this.send(new ClientboundSetEquipmentPacket(entity.getId(), Arrays.stream(net.minecraft.world.entity.EquipmentSlot.values()).map((slot) -> Pair.of(slot, allay.stripMeta(allay.getItemBySlot(slot), true))).collect(Collectors.toList()))); // Paper - Hide unnecessary item meta
|
2023-10-27 01:34:58 +02:00
|
|
|
ServerGamePacketListenerImpl.this.player.containerMenu.sendAllDataToRemote();
|
2022-12-07 22:35:34 +01:00
|
|
|
}
|
2022-08-14 10:03:13 +02:00
|
|
|
}
|
2021-12-01 13:32:36 +01:00
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
2024-04-12 21:14:06 +02:00
|
|
|
index 8025e351fb3e24aa67b31eca74be1bc368592851..e44a45ced6f7cd7db44388bb2e85c722b6b5ca8a 100644
|
2021-12-01 13:32:36 +01:00
|
|
|
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
|
|
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
Updated Upstream (Bukkit/CraftBukkit/Spigot) (#10277)
Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing
Bukkit Changes:
9a80d38c SPIGOT-336, SPIGOT-3366, SPIGOT-5768, SPIGOT-6409, SPIGOT-6861, PR-722: Add EntityRemoveEvent
258086d9 SPIGOT-7417, PR-967: Add Sign#getTargetSide and Sign#getAllowedEditor
ffaba051 SPIGOT-7584: Add missing Tag.ITEMS_NON_FLAMMABLE_WOOD
CraftBukkit Changes:
98b6c1ac7 SPIGOT-7589 Fix NullPointerException when bans expire
a2736ddb0 SPIGOT-336, SPIGOT-3366, SPIGOT-5768, SPIGOT-6409, SPIGOT-6861, PR-1008: Add EntityRemoveEvent
5bf12cb89 SPIGOT-7565: Throw a more descriptive error message when a developer tries to spawn an entity from a CraftBukkit class
76d95fe7e SPIGOT-7417, PR-1343: Add Sign#getTargetSide and Sign#getAllowedEditor
Spigot Changes:
e9ec5485 Rebuild patches
f1b62e0c Rebuild patches
2024-02-23 14:37:33 +01:00
|
|
|
@@ -3210,7 +3210,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
2021-12-01 13:32:36 +01:00
|
|
|
|
|
|
|
// Paper start - prevent oversized data
|
|
|
|
ItemStack toSend = sanitizeItemStack(itemstack1, true);
|
|
|
|
- list.add(Pair.of(enumitemslot, toSend));
|
2024-01-18 22:00:40 +01:00
|
|
|
+ list.add(Pair.of(enumitemslot, stripMeta(toSend, toSend == itemstack1))); // Paper - Hide unnecessary item meta
|
|
|
|
// Paper end - prevent oversized data
|
2021-12-01 13:32:36 +01:00
|
|
|
switch (enumitemslot.getType()) {
|
|
|
|
case HAND:
|
Updated Upstream (Bukkit/CraftBukkit/Spigot) (#10277)
Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing
Bukkit Changes:
9a80d38c SPIGOT-336, SPIGOT-3366, SPIGOT-5768, SPIGOT-6409, SPIGOT-6861, PR-722: Add EntityRemoveEvent
258086d9 SPIGOT-7417, PR-967: Add Sign#getTargetSide and Sign#getAllowedEditor
ffaba051 SPIGOT-7584: Add missing Tag.ITEMS_NON_FLAMMABLE_WOOD
CraftBukkit Changes:
98b6c1ac7 SPIGOT-7589 Fix NullPointerException when bans expire
a2736ddb0 SPIGOT-336, SPIGOT-3366, SPIGOT-5768, SPIGOT-6409, SPIGOT-6861, PR-1008: Add EntityRemoveEvent
5bf12cb89 SPIGOT-7565: Throw a more descriptive error message when a developer tries to spawn an entity from a CraftBukkit class
76d95fe7e SPIGOT-7417, PR-1343: Add Sign#getTargetSide and Sign#getAllowedEditor
Spigot Changes:
e9ec5485 Rebuild patches
f1b62e0c Rebuild patches
2024-02-23 14:37:33 +01:00
|
|
|
@@ -3224,6 +3224,77 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
2023-06-08 09:20:03 +02:00
|
|
|
((ServerLevel) this.level()).getChunkSource().broadcast(this, new ClientboundSetEquipmentPacket(this.getId(), list));
|
2021-12-01 13:32:36 +01:00
|
|
|
}
|
|
|
|
|
2024-01-18 22:00:40 +01:00
|
|
|
+ // Paper start - Hide unnecessary item meta
|
2021-12-01 13:32:36 +01:00
|
|
|
+ public ItemStack stripMeta(final ItemStack itemStack, final boolean copyItemStack) {
|
|
|
|
+ if (itemStack.isEmpty() || (!itemStack.hasTag() && itemStack.getCount() < 2)) {
|
|
|
|
+ return itemStack;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ final ItemStack copy = copyItemStack ? itemStack.copy() : itemStack;
|
2023-06-08 21:00:58 +02:00
|
|
|
+ if (this.level().paperConfig().anticheat.obfuscation.items.hideDurability) {
|
2021-12-01 13:32:36 +01:00
|
|
|
+ // Only show damage values for elytra's, since they show a different texture when broken.
|
|
|
|
+ if (!copy.is(Items.ELYTRA) || copy.getDamageValue() < copy.getMaxDamage() - 1) {
|
|
|
|
+ copy.setDamageValue(0);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
2022-11-19 22:41:09 +01:00
|
|
|
+ final CompoundTag tag = copy.getTag();
|
2023-06-08 21:00:58 +02:00
|
|
|
+ if (this.level().paperConfig().anticheat.obfuscation.items.hideItemmeta) {
|
2021-12-01 13:32:36 +01:00
|
|
|
+ // Some resource packs show different textures when there is more than one item. Since this shouldn't provide a big advantage,
|
|
|
|
+ // we'll tell the client if there's one or (more than) two items.
|
|
|
|
+ copy.setCount(copy.getCount() > 1 ? 2 : 1);
|
|
|
|
+ // We can't just strip out display, leather helmets still use the display.color tag.
|
|
|
|
+ if (tag != null) {
|
|
|
|
+ if (tag.get("display") instanceof CompoundTag displayTag) {
|
|
|
|
+ displayTag.remove("Lore");
|
|
|
|
+ displayTag.remove("Name");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (tag.get("Enchantments") instanceof ListTag enchantmentsTag && !enchantmentsTag.isEmpty()) {
|
|
|
|
+ // The client still renders items with the enchantment glow if the enchantments tag contains at least one (empty) child.
|
|
|
|
+ ListTag enchantments = new ListTag();
|
2022-01-02 00:26:53 +01:00
|
|
|
+ CompoundTag fakeEnchantment = new CompoundTag();
|
|
|
|
+ // Soul speed boots generate client side particles.
|
|
|
|
+ if (EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SOUL_SPEED, itemStack) > 0) {
|
|
|
|
+ fakeEnchantment.putString("id", org.bukkit.enchantments.Enchantment.SOUL_SPEED.getKey().asString());
|
|
|
|
+ fakeEnchantment.putInt("lvl", 1);
|
|
|
|
+ }
|
|
|
|
+ enchantments.add(fakeEnchantment);
|
2021-12-01 13:32:36 +01:00
|
|
|
+ tag.put("Enchantments", enchantments);
|
|
|
|
+ }
|
|
|
|
+ tag.remove("AttributeModifiers");
|
2023-10-14 23:41:15 +02:00
|
|
|
+ tag.remove("Unbreakable");
|
|
|
|
+ tag.remove("PublicBukkitValues"); // Persistent data container1
|
2022-04-18 12:23:37 +02:00
|
|
|
+
|
|
|
|
+ // Books
|
|
|
|
+ tag.remove("author");
|
|
|
|
+ tag.remove("filtered_title");
|
|
|
|
+ tag.remove("pages");
|
|
|
|
+ tag.remove("filtered_pages");
|
|
|
|
+ tag.remove("title");
|
|
|
|
+ tag.remove("generation");
|
2023-10-14 23:41:15 +02:00
|
|
|
+
|
|
|
|
+ // Filled maps
|
|
|
|
+ tag.remove("map");
|
|
|
|
+ tag.remove("map_scale_direction");
|
|
|
|
+ tag.remove("map_to_lock");
|
2021-12-01 13:32:36 +01:00
|
|
|
+ }
|
|
|
|
+ }
|
2022-11-19 22:41:09 +01:00
|
|
|
+
|
2023-06-08 21:00:58 +02:00
|
|
|
+ if (this.level().paperConfig().anticheat.obfuscation.items.hideItemmetaWithVisualEffects && tag != null) {
|
2022-11-19 22:41:09 +01:00
|
|
|
+ // Lodestone compasses
|
|
|
|
+ tag.remove("LodestonePos");
|
|
|
|
+ if (tag.contains("LodestoneDimension")) {
|
|
|
|
+ // The client shows the glint if either the position or the dimension is present, so we just wipe
|
|
|
|
+ // the position and fake the dimension
|
|
|
|
+ tag.putString("LodestoneDimension", "paper:paper");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
2021-12-01 13:32:36 +01:00
|
|
|
+ return copy;
|
|
|
|
+ }
|
2024-01-18 22:00:40 +01:00
|
|
|
+ // Paper end - Hide unnecessary item meta
|
2021-12-01 13:32:36 +01:00
|
|
|
+
|
2022-01-02 00:26:53 +01:00
|
|
|
// Paper start - prevent oversized data
|
2021-12-01 13:32:36 +01:00
|
|
|
public static ItemStack sanitizeItemStack(final ItemStack itemStack, final boolean copyItemStack) {
|
|
|
|
if (itemStack.isEmpty() || !itemStack.hasTag()) {
|