From d43a862491d0f9ed939f8b16c1bf01b631e87862 Mon Sep 17 00:00:00 2001 From: RednedEpic Date: Tue, 13 Jun 2023 22:54:55 -0500 Subject: [PATCH] Strip unnecessary block entity tag from container NBT --- .../java/org/geysermc/geyser/item/Items.java | 8 +-- .../type/ChestItem.java} | 49 +++++++------------ .../geyser/item/type/ShulkerBoxItem.java | 14 ++++-- 3 files changed, 34 insertions(+), 37 deletions(-) rename core/src/main/java/org/geysermc/geyser/{translator/inventory/item/NbtItemStackTranslator.java => item/type/ChestItem.java} (54%) diff --git a/core/src/main/java/org/geysermc/geyser/item/Items.java b/core/src/main/java/org/geysermc/geyser/item/Items.java index e50879445..1339f166a 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -315,7 +315,7 @@ public final class Items { public static final Item PURPUR_PILLAR = register(new BlockItem("purpur_pillar", builder())); public static final Item PURPUR_STAIRS = register(new BlockItem("purpur_stairs", builder())); public static final Item SPAWNER = register(new BlockItem("spawner", builder())); - public static final Item CHEST = register(new BlockItem("chest", builder())); + public static final Item CHEST = register(new ChestItem("chest", builder())); public static final Item CRAFTING_TABLE = register(new BlockItem("crafting_table", builder())); public static final Item FARMLAND = register(new BlockItem("farmland", builder())); public static final Item FURNACE = register(new BlockItem("furnace", builder())); @@ -397,7 +397,7 @@ public final class Items { public static final Item END_STONE_BRICKS = register(new BlockItem("end_stone_bricks", builder())); public static final Item DRAGON_EGG = register(new BlockItem("dragon_egg", builder())); public static final Item SANDSTONE_STAIRS = register(new BlockItem("sandstone_stairs", builder())); - public static final Item ENDER_CHEST = register(new BlockItem("ender_chest", builder())); + public static final Item ENDER_CHEST = register(new ChestItem("ender_chest", builder())); public static final Item EMERALD_BLOCK = register(new BlockItem("emerald_block", builder())); public static final Item OAK_STAIRS = register(new BlockItem("oak_stairs", builder())); public static final Item SPRUCE_STAIRS = register(new BlockItem("spruce_stairs", builder())); @@ -694,7 +694,7 @@ public final class Items { public static final Item SCULK_SENSOR = register(new BlockItem("sculk_sensor", builder())); public static final Item CALIBRATED_SCULK_SENSOR = register(new BlockItem("calibrated_sculk_sensor", builder())); public static final Item TRIPWIRE_HOOK = register(new BlockItem("tripwire_hook", builder())); - public static final Item TRAPPED_CHEST = register(new BlockItem("trapped_chest", builder())); + public static final Item TRAPPED_CHEST = register(new ChestItem("trapped_chest", builder())); public static final Item TNT = register(new BlockItem("tnt", builder())); public static final Item REDSTONE_LAMP = register(new BlockItem("redstone_lamp", builder())); public static final Item NOTE_BLOCK = register(new BlockItem("note_block", builder())); @@ -1192,7 +1192,7 @@ public final class Items { public static final Item PIGLIN_BANNER_PATTERN = register(new Item("piglin_banner_pattern", builder().stackSize(1))); public static final Item GOAT_HORN = register(new GoatHornItem("goat_horn", builder().stackSize(1))); public static final Item COMPOSTER = register(new BlockItem("composter", builder())); - public static final Item BARREL = register(new BlockItem("barrel", builder())); + public static final Item BARREL = register(new ChestItem("barrel", builder())); public static final Item SMOKER = register(new BlockItem("smoker", builder())); public static final Item BLAST_FURNACE = register(new BlockItem("blast_furnace", builder())); public static final Item CARTOGRAPHY_TABLE = register(new BlockItem("cartography_table", builder())); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/NbtItemStackTranslator.java b/core/src/main/java/org/geysermc/geyser/item/type/ChestItem.java similarity index 54% rename from core/src/main/java/org/geysermc/geyser/translator/inventory/item/NbtItemStackTranslator.java rename to core/src/main/java/org/geysermc/geyser/item/type/ChestItem.java index a51e2307d..99857006c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/NbtItemStackTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ChestItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,42 +23,31 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.inventory.item; +package org.geysermc.geyser.item.type; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; -import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.registry.type.ItemMapping; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.session.GeyserSession; -public abstract class NbtItemStackTranslator { - - /** - * Translate the item NBT to Bedrock - * @param session the client's current session - * @param itemTag the item's CompoundTag (cloned from Geyser's cached copy) - * @param mapping Geyser's item mapping - */ - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { +public class ChestItem extends BlockItem { + public ChestItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); } - /** - * Translate the item NBT to Java. - * @param itemTag the item's CompoundTag - * @param mapping Geyser's item mapping - */ - public void translateToJava(CompoundTag itemTag, ItemMapping mapping) { + @Override + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag) { + super.translateNbtToBedrock(session, tag); + // Strip the BlockEntityTag from the chests contents + // sent to the client. The client does not parse this + // or use it for anything, as this tag is fully + // server-side, so we remove it to reduce bandwidth and + // solve potential issues with very large tags. + + // There was a problem in the past where this would strip + // NBT data in creative mode, however with the new server + // authoritative inventories, this is no longer a concern. + tag.remove("BlockEntityTag"); } - - /** - * Gets whether this nbt translator takes in this item. - * - * @param item Geyser's item mapping - * @return if the item should be processed under this class - */ - public boolean acceptItem(Item item) { - return true; - } // TODO - } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java index 49828e475..717bad9a4 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java @@ -77,9 +77,17 @@ public class ShulkerBoxItem extends BlockItem { itemsList.add(boxItemTag); } tag.put(itemsList); - // Don't actually bother with removing the block entity tag. Too risky to translate - // if the user is on creative and messing with a shulker box - //itemTag.remove("BlockEntityTag"); + + // Strip the BlockEntityTag from the chests contents + // sent to the client. The client does not parse this + // or use it for anything, as this tag is fully + // server-side, so we remove it to reduce bandwidth and + // solve potential issues with very large tags. + + // There was a problem in the past where this would strip + // NBT data in creative mode, however with the new server + // authoritative inventories, this is no longer a concern. + tag.remove("BlockEntityTag"); } @Override