From bb4a8b73e0923e72c20f28e4be41057301a988cb Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Thu, 14 Mar 2024 10:54:18 +0100 Subject: [PATCH] Small cleanup --- .../item/data/AttributeModifier.java | 12 +++---- .../type/types/item/StructuredDataType.java | 33 +++++++++---------- .../BlockItemPacketRewriter1_20_5.java | 20 +++++------ .../rewriter/StructuredDataConverter.java | 19 ++++++++--- 4 files changed, 46 insertions(+), 38 deletions(-) diff --git a/api/src/main/java/com/viaversion/viaversion/api/minecraft/item/data/AttributeModifier.java b/api/src/main/java/com/viaversion/viaversion/api/minecraft/item/data/AttributeModifier.java index 5db6b6865..894740e79 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/minecraft/item/data/AttributeModifier.java +++ b/api/src/main/java/com/viaversion/viaversion/api/minecraft/item/data/AttributeModifier.java @@ -41,19 +41,19 @@ public final class AttributeModifier { public void write(final ByteBuf buffer, final AttributeModifier value) throws Exception { Type.VAR_INT.writePrimitive(buffer, value.attribute); ModifierData.TYPE.write(buffer, value.modifier); - Type.VAR_INT.writePrimitive(buffer, value.slot); + Type.VAR_INT.writePrimitive(buffer, value.slotType); } }; public static final Type ARRAY_TYPE = new ArrayType<>(TYPE); private final int attribute; private final ModifierData modifier; - private final int slot; + private final int slotType; - public AttributeModifier(final int attribute, final ModifierData modifier, final int slot) { + public AttributeModifier(final int attribute, final ModifierData modifier, final int slotType) { this.attribute = attribute; this.modifier = modifier; - this.slot = slot; + this.slotType = slotType; } public int attribute() { @@ -64,7 +64,7 @@ public final class AttributeModifier { return modifier; } - public int slot() { - return slot; + public int slotType() { + return slotType; } } diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/item/StructuredDataType.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/item/StructuredDataType.java index 813b221d6..217f5f059 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/type/types/item/StructuredDataType.java +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/item/StructuredDataType.java @@ -22,19 +22,18 @@ */ package com.viaversion.viaversion.api.type.types.item; +import com.google.common.base.Preconditions; import com.viaversion.viaversion.api.data.FullMappings; import com.viaversion.viaversion.api.minecraft.data.StructuredData; import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey; import com.viaversion.viaversion.api.protocol.Protocol; import com.viaversion.viaversion.api.type.Type; import io.netty.buffer.ByteBuf; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import org.checkerframework.checker.nullness.qual.Nullable; public class StructuredDataType extends Type> { - private final Int2ObjectMap> types = new Int2ObjectOpenHashMap<>(); + private StructuredDataKey[] types; public StructuredDataType() { super(StructuredData.class); @@ -48,16 +47,17 @@ public class StructuredDataType extends Type> { @Override public StructuredData read(final ByteBuf buffer) throws Exception { + Preconditions.checkNotNull(types, "StructuredDataType has not been initialized"); final int id = Type.VAR_INT.readPrimitive(buffer); - final StructuredDataKey key = this.types.get(id); - if (key != null) { - return readData(buffer, key, id); + final StructuredDataKey key = this.types[id]; + if (key == null) { + throw new IllegalArgumentException("No data component serializer found for id " + id); } - throw new IllegalArgumentException("No data component serializer found for id " + id); + return readData(buffer, key, id); } public @Nullable StructuredDataKey key(final int id) { - return types.get(id); + return id >= 0 && id < types.length ? types[id] : null; } private StructuredData readData(final ByteBuf buffer, final StructuredDataKey key, final int id) throws Exception { @@ -65,25 +65,24 @@ public class StructuredDataType extends Type> { } public DataFiller filler(final Protocol protocol) { - return filler(protocol, true); - } - - public DataFiller filler(final Protocol protocol, final boolean useMappedNames) { - return new DataFiller(protocol, useMappedNames); + return new DataFiller(protocol); } public final class DataFiller { private final FullMappings mappings; - private final boolean useMappedNames; - private DataFiller(final Protocol protocol, final boolean useMappedNames) { + private DataFiller(final Protocol protocol) { this.mappings = protocol.getMappingData().getDataComponentSerializerMappings(); - this.useMappedNames = useMappedNames; + Preconditions.checkArgument(mappings != null, "No mappings found for protocol %s", protocol.getClass()); + Preconditions.checkArgument(types == null, "StructuredDataType has already been initialized"); + types = new StructuredDataKey[mappings.mappedSize()]; } public DataFiller add(final StructuredDataKey reader) { - types.put(useMappedNames ? mappings.mappedId(reader.identifier()) : mappings.id(reader.identifier()), reader); + final int id = mappings.mappedId(reader.identifier()); + Preconditions.checkArgument(id != -1, "No mapped id found for %s", reader.identifier()); + types[id] = reader; return this; } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java index a4691acc2..ea6c58eee 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java @@ -261,14 +261,14 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter + // TODO add default data if needed (e.g. when getting a goat horn via the give command) :> if (tag == null) { return item; } // Rewrite nbt to new data structures final int hideFlagsValue = tag.getInt("HideFlags"); - if ((hideFlagsValue & 0x20) != 0) { + if ((hideFlagsValue & StructuredDataConverter.HIDE_ADDITIONAL) != 0) { data.set(StructuredDataKey.HIDE_ADDITIONAL_TOOLTIP); } @@ -313,12 +313,12 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter attributeModifiersTag = tag.getListTag("AttributeModifiers", CompoundTag.class); if (attributeModifiersTag != null) { - updateAttributes(data, attributeModifiersTag, (hideFlagsValue & 0x02) == 0); + updateAttributes(data, attributeModifiersTag, (hideFlagsValue & StructuredDataConverter.HIDE_ATTRIBUTES) == 0); } final CompoundTag fireworksTag = tag.getCompoundTag("Fireworks"); @@ -378,8 +378,8 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter, DataConverter> REWRITERS = new Reference2ObjectOpenHashMap<>(); static { @@ -50,7 +59,7 @@ final class StructuredDataConverter { register(StructuredDataKey.UNBREAKABLE, (data, tag) -> { tag.putBoolean("Unbreakable", true); if (!data.showInTooltip()) { - putHideFlag(tag, 0x04); + putHideFlag(tag, HIDE_UNBREAKABLE); } }); register(StructuredDataKey.CUSTOM_NAME, (data, tag) -> tag.putString("CustomName", ComponentUtil.tagToJsonString(data))); @@ -75,14 +84,14 @@ final class StructuredDataConverter { modifierTag.putString("AttributeName", identifier); modifierTag.putString("Name", modifier.modifier().name()); modifierTag.putDouble("Amount", modifier.modifier().amount()); - modifierTag.putInt("Slot", modifier.slot()); + modifierTag.putInt("Slot", modifier.slotType()); modifierTag.putInt("Operation", modifier.modifier().operation()); modifiers.add(modifierTag); } tag.put("AttributeModifiers", modifiers); if (!data.showInTooltip()) { - putHideFlag(tag, 0x02); + putHideFlag(tag, HIDE_ATTRIBUTES); } }); register(StructuredDataKey.CUSTOM_MODEL_DATA, (data, tag) -> tag.putInt("CustomModelData", data)); @@ -91,7 +100,7 @@ final class StructuredDataConverter { register(StructuredDataKey.DYED_COLOR, (data, tag) -> { tag.putInt("color", data.rgb()); if (!data.showInTooltip()) { - putHideFlag(tag, 0x40); + putHideFlag(tag, HIDE_DYE_COLOR); } }); register(StructuredDataKey.MAP_COLOR, (data, tag) -> tag.putInt("MapColor", data)); @@ -281,7 +290,7 @@ final class StructuredDataConverter { tag.put(storedEnchantments ? "StoredEnchantments" : "Enchantments", enchantments); if (!data.showInTooltip()) { - putHideFlag(tag, storedEnchantments ? 0x20 : 0x01); + putHideFlag(tag, storedEnchantments ? HIDE_ADDITIONAL : HIDE_ENCHANTMENTS); } }