Search in sources :

Example 11 with ListTag

use of com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag in project ViaBackwards by ViaVersion.

the class BlockItemPackets1_13 method invertShieldAndBannerId.

private void invertShieldAndBannerId(Item item, CompoundTag tag) {
    if (item.identifier() != 442 && item.identifier() != 425)
        return;
    Tag blockEntityTag = tag.get("BlockEntityTag");
    if (!(blockEntityTag instanceof CompoundTag))
        return;
    CompoundTag blockEntityCompoundTag = (CompoundTag) blockEntityTag;
    Tag base = blockEntityCompoundTag.get("Base");
    if (base instanceof IntTag) {
        IntTag baseTag = (IntTag) base;
        // invert color id
        baseTag.setValue(15 - baseTag.asInt());
    }
    Tag patterns = blockEntityCompoundTag.get("Patterns");
    if (patterns instanceof ListTag) {
        ListTag patternsTag = (ListTag) patterns;
        for (Tag pattern : patternsTag) {
            if (!(pattern instanceof CompoundTag))
                continue;
            IntTag colorTag = ((CompoundTag) pattern).get("Color");
            // Invert color id
            colorTag.setValue(15 - colorTag.asInt());
        }
    }
}
Also used : ListTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag) ShortTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ShortTag) IntTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag) ByteTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ByteTag) Tag(com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag) StringTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag) NumberTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.NumberTag) CompoundTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag) ListTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag) CompoundTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag) IntTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag)

Example 12 with ListTag

use of com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag in project ViaBackwards by ViaVersion.

the class BlockItemPackets1_13 method rewriteEnchantmentsToServer.

private void rewriteEnchantmentsToServer(CompoundTag tag, boolean storedEnch) {
    String key = storedEnch ? "StoredEnchantments" : "Enchantments";
    ListTag enchantments = tag.get(storedEnch ? key : "ench");
    if (enchantments == null)
        return;
    ListTag newEnchantments = new ListTag(CompoundTag.class);
    boolean dummyEnchant = false;
    if (!storedEnch) {
        IntTag hideFlags = tag.remove(extraNbtTag + "|OldHideFlags");
        if (hideFlags != null) {
            tag.put("HideFlags", new IntTag(hideFlags.asByte()));
            dummyEnchant = true;
        } else if (tag.remove(extraNbtTag + "|DummyEnchant") != null) {
            tag.remove("HideFlags");
            dummyEnchant = true;
        }
    }
    for (Tag enchEntry : enchantments) {
        CompoundTag enchantmentEntry = new CompoundTag();
        short oldId = ((NumberTag) ((CompoundTag) enchEntry).get("id")).asShort();
        short level = ((NumberTag) ((CompoundTag) enchEntry).get("lvl")).asShort();
        if (dummyEnchant && oldId == 0 && level == 0) {
            // Skip dummy enchatment
            continue;
        }
        String newId = Protocol1_13To1_12_2.MAPPINGS.getOldEnchantmentsIds().get(oldId);
        if (newId == null) {
            newId = "viaversion:legacy/" + oldId;
        }
        enchantmentEntry.put("id", new StringTag(newId));
        enchantmentEntry.put("lvl", new ShortTag(level));
        newEnchantments.add(enchantmentEntry);
    }
    ListTag noMapped = tag.remove(extraNbtTag + "|Enchantments");
    if (noMapped != null) {
        for (Tag value : noMapped) {
            newEnchantments.add(value);
        }
    }
    CompoundTag display = tag.get("display");
    if (display == null) {
        tag.put("display", display = new CompoundTag());
    }
    ListTag oldLore = tag.remove(extraNbtTag + "|OldLore");
    if (oldLore != null) {
        ListTag lore = display.get("Lore");
        if (lore == null) {
            tag.put("Lore", lore = new ListTag());
        }
        lore.setValue(oldLore.getValue());
    } else if (tag.remove(extraNbtTag + "|DummyLore") != null) {
        display.remove("Lore");
        if (display.isEmpty()) {
            tag.remove("display");
        }
    }
    if (!storedEnch) {
        tag.remove("ench");
    }
    tag.put(key, newEnchantments);
}
Also used : StringTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag) NumberTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.NumberTag) ListTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag) ShortTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ShortTag) IntTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag) ByteTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ByteTag) Tag(com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag) StringTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag) NumberTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.NumberTag) CompoundTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag) ListTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag) IntTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag) CompoundTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag) ShortTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ShortTag)

Example 13 with ListTag

use of com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag in project ViaBackwards by ViaVersion.

the class BlockItemPackets1_13 method rewriteEnchantmentsToClient.

// TODO un-ugly all of this
private void rewriteEnchantmentsToClient(CompoundTag tag, boolean storedEnch) {
    String key = storedEnch ? "StoredEnchantments" : "Enchantments";
    ListTag enchantments = tag.get(key);
    if (enchantments == null)
        return;
    ListTag noMapped = new ListTag(CompoundTag.class);
    ListTag newEnchantments = new ListTag(CompoundTag.class);
    List<Tag> lore = new ArrayList<>();
    boolean hasValidEnchants = false;
    for (Tag enchantmentEntryTag : enchantments.clone()) {
        CompoundTag enchantmentEntry = (CompoundTag) enchantmentEntryTag;
        Tag idTag = enchantmentEntry.get("id");
        if (!(idTag instanceof StringTag))
            continue;
        String newId = (String) idTag.getValue();
        int levelValue = ((NumberTag) enchantmentEntry.get("lvl")).asInt();
        short level = levelValue < Short.MAX_VALUE ? (short) levelValue : Short.MAX_VALUE;
        String mappedEnchantmentId = enchantmentMappings.get(newId);
        if (mappedEnchantmentId != null) {
            lore.add(new StringTag(mappedEnchantmentId + " " + EnchantmentRewriter.getRomanNumber(level)));
            noMapped.add(enchantmentEntry);
        } else if (!newId.isEmpty()) {
            Short oldId = Protocol1_13To1_12_2.MAPPINGS.getOldEnchantmentsIds().inverse().get(newId);
            if (oldId == null) {
                if (!newId.startsWith("viaversion:legacy/")) {
                    // Custom enchant (?)
                    noMapped.add(enchantmentEntry);
                    // Some custom-enchant plugins write it into the lore manually, which would double its entry
                    if (ViaBackwards.getConfig().addCustomEnchantsToLore()) {
                        String name = newId;
                        int index = name.indexOf(':') + 1;
                        if (index != 0 && index != name.length()) {
                            name = name.substring(index);
                        }
                        name = "§7" + Character.toUpperCase(name.charAt(0)) + name.substring(1).toLowerCase(Locale.ENGLISH);
                        lore.add(new StringTag(name + " " + EnchantmentRewriter.getRomanNumber(level)));
                    }
                    if (Via.getManager().isDebug()) {
                        ViaBackwards.getPlatform().getLogger().warning("Found unknown enchant: " + newId);
                    }
                    continue;
                } else {
                    oldId = Short.valueOf(newId.substring(18));
                }
            }
            if (level != 0) {
                hasValidEnchants = true;
            }
            CompoundTag newEntry = new CompoundTag();
            newEntry.put("id", new ShortTag(oldId));
            newEntry.put("lvl", new ShortTag(level));
            newEnchantments.add(newEntry);
        }
    }
    // Put here to hide empty enchantment from 1.14 rewrites
    if (!storedEnch && !hasValidEnchants) {
        IntTag hideFlags = tag.get("HideFlags");
        if (hideFlags == null) {
            hideFlags = new IntTag();
            tag.put(extraNbtTag + "|DummyEnchant", new ByteTag());
        } else {
            tag.put(extraNbtTag + "|OldHideFlags", new IntTag(hideFlags.asByte()));
        }
        if (newEnchantments.size() == 0) {
            CompoundTag enchEntry = new CompoundTag();
            enchEntry.put("id", new ShortTag((short) 0));
            enchEntry.put("lvl", new ShortTag((short) 0));
            newEnchantments.add(enchEntry);
        }
        int value = hideFlags.asByte() | 1;
        hideFlags.setValue(value);
        tag.put("HideFlags", hideFlags);
    }
    if (noMapped.size() != 0) {
        tag.put(extraNbtTag + "|" + key, noMapped);
        if (!lore.isEmpty()) {
            CompoundTag display = tag.get("display");
            if (display == null) {
                tag.put("display", display = new CompoundTag());
            }
            ListTag loreTag = display.get("Lore");
            if (loreTag == null) {
                display.put("Lore", loreTag = new ListTag(StringTag.class));
                tag.put(extraNbtTag + "|DummyLore", new ByteTag());
            } else if (loreTag.size() != 0) {
                ListTag oldLore = new ListTag(StringTag.class);
                for (Tag value : loreTag) {
                    oldLore.add(value.clone());
                }
                tag.put(extraNbtTag + "|OldLore", oldLore);
                lore.addAll(loreTag.getValue());
            }
            loreTag.setValue(lore);
        }
    }
    tag.remove("Enchantments");
    tag.put(storedEnch ? key : "ench", newEnchantments);
}
Also used : StringTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag) ArrayList(java.util.ArrayList) ListTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag) ShortTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ShortTag) ByteTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ByteTag) NumberTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.NumberTag) ListTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag) ShortTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ShortTag) IntTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag) ByteTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ByteTag) Tag(com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag) StringTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag) NumberTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.NumberTag) CompoundTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag) CompoundTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag) IntTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag)

Example 14 with ListTag

use of com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag in project ViaBackwards by ViaVersion.

the class EntityPackets1_17 method registerPackets.

@Override
protected void registerPackets() {
    registerTrackerWithData(ClientboundPackets1_17.SPAWN_ENTITY, Entity1_17Types.FALLING_BLOCK);
    registerSpawnTracker(ClientboundPackets1_17.SPAWN_MOB);
    registerTracker(ClientboundPackets1_17.SPAWN_EXPERIENCE_ORB, Entity1_17Types.EXPERIENCE_ORB);
    registerTracker(ClientboundPackets1_17.SPAWN_PAINTING, Entity1_17Types.PAINTING);
    registerTracker(ClientboundPackets1_17.SPAWN_PLAYER, Entity1_17Types.PLAYER);
    registerMetadataRewriter(ClientboundPackets1_17.ENTITY_METADATA, Types1_17.METADATA_LIST, Types1_16.METADATA_LIST);
    protocol.registerClientbound(ClientboundPackets1_17.REMOVE_ENTITY, ClientboundPackets1_16_2.DESTROY_ENTITIES, new PacketRemapper() {

        @Override
        public void registerMap() {
            handler(wrapper -> {
                int entityId = wrapper.read(Type.VAR_INT);
                tracker(wrapper.user()).removeEntity(entityId);
                // Write into single value array
                int[] array = { entityId };
                wrapper.write(Type.VAR_INT_ARRAY_PRIMITIVE, array);
            });
        }
    });
    protocol.registerClientbound(ClientboundPackets1_17.JOIN_GAME, new PacketRemapper() {

        @Override
        public void registerMap() {
            // Entity ID
            map(Type.INT);
            // Hardcore
            map(Type.BOOLEAN);
            // Gamemode
            map(Type.UNSIGNED_BYTE);
            // Previous Gamemode
            map(Type.BYTE);
            // Worlds
            map(Type.STRING_ARRAY);
            // Dimension registry
            map(Type.NBT);
            // Current dimension data
            map(Type.NBT);
            // World
            map(Type.STRING);
            handler(wrapper -> {
                byte previousGamemode = wrapper.get(Type.BYTE, 0);
                if (previousGamemode == -1) {
                    // "Unset" gamemode removed
                    wrapper.set(Type.BYTE, 0, (byte) 0);
                }
            });
            handler(getTrackerHandler(Entity1_17Types.PLAYER, Type.INT));
            handler(worldDataTrackerHandler(1));
            handler(wrapper -> {
                CompoundTag registry = wrapper.get(Type.NBT, 0);
                CompoundTag biomeRegistry = registry.get("minecraft:worldgen/biome");
                ListTag biomes = biomeRegistry.get("value");
                for (Tag biome : biomes) {
                    CompoundTag biomeCompound = ((CompoundTag) biome).get("element");
                    StringTag category = biomeCompound.get("category");
                    if (category.getValue().equalsIgnoreCase("underground")) {
                        category.setValue("none");
                    }
                }
                CompoundTag dimensionRegistry = registry.get("minecraft:dimension_type");
                ListTag dimensions = dimensionRegistry.get("value");
                for (Tag dimension : dimensions) {
                    CompoundTag dimensionCompound = ((CompoundTag) dimension).get("element");
                    reduceExtendedHeight(dimensionCompound, false);
                }
                reduceExtendedHeight(wrapper.get(Type.NBT, 1), true);
            });
        }
    });
    protocol.registerClientbound(ClientboundPackets1_17.RESPAWN, new PacketRemapper() {

        @Override
        public void registerMap() {
            // Dimension data
            map(Type.NBT);
            // World
            map(Type.STRING);
            handler(worldDataTrackerHandler(0));
            handler(wrapper -> reduceExtendedHeight(wrapper.get(Type.NBT, 0), true));
        }
    });
    protocol.registerClientbound(ClientboundPackets1_17.PLAYER_POSITION, new PacketRemapper() {

        @Override
        public void registerMap() {
            map(Type.DOUBLE);
            map(Type.DOUBLE);
            map(Type.DOUBLE);
            map(Type.FLOAT);
            map(Type.FLOAT);
            map(Type.BYTE);
            map(Type.VAR_INT);
            handler(wrapper -> {
                // Dismount vehicle ¯\_(ツ)_/¯
                wrapper.read(Type.BOOLEAN);
            });
        }
    });
    protocol.registerClientbound(ClientboundPackets1_17.ENTITY_PROPERTIES, new PacketRemapper() {

        @Override
        public void registerMap() {
            // Entity id
            map(Type.VAR_INT);
            handler(wrapper -> {
                // Collection length
                wrapper.write(Type.INT, wrapper.read(Type.VAR_INT));
            });
        }
    });
    // TODO translatables
    protocol.mergePacket(ClientboundPackets1_17.COMBAT_ENTER, ClientboundPackets1_16_2.COMBAT_EVENT, 0);
    protocol.mergePacket(ClientboundPackets1_17.COMBAT_END, ClientboundPackets1_16_2.COMBAT_EVENT, 1);
    protocol.mergePacket(ClientboundPackets1_17.COMBAT_KILL, ClientboundPackets1_16_2.COMBAT_EVENT, 2);
}
Also used : ClientboundPackets1_17(com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ClientboundPackets1_17) Particle(com.viaversion.viaversion.api.type.types.Particle) Protocol1_16_4To1_17(com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.Protocol1_16_4To1_17) MetaType(com.viaversion.viaversion.api.minecraft.metadata.MetaType) Tag(com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag) EntityType(com.viaversion.viaversion.api.minecraft.entities.EntityType) StringTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag) ListTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag) Types1_17(com.viaversion.viaversion.api.type.types.version.Types1_17) Entity1_16_2Types(com.viaversion.viaversion.api.minecraft.entities.Entity1_16_2Types) Types1_16(com.viaversion.viaversion.api.type.types.version.Types1_16) ClientboundPackets1_16_2(com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2) PacketRemapper(com.viaversion.viaversion.api.protocol.remapper.PacketRemapper) Type(com.viaversion.viaversion.api.type.Type) Entity1_17Types(com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types) ViaBackwards(com.viaversion.viabackwards.ViaBackwards) CompoundTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag) IntTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag) EntityRewriter(com.viaversion.viabackwards.api.rewriters.EntityRewriter) StringTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag) PacketRemapper(com.viaversion.viaversion.api.protocol.remapper.PacketRemapper) Tag(com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag) StringTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag) ListTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag) CompoundTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag) IntTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag) ListTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag) CompoundTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag)

Example 15 with ListTag

use of com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag in project ViaBackwards by ViaVersion.

the class EntityPackets1_18 method registerPackets.

@Override
protected void registerPackets() {
    registerMetadataRewriter(ClientboundPackets1_18.ENTITY_METADATA, Types1_18.METADATA_LIST, Types1_17.METADATA_LIST);
    protocol.registerClientbound(ClientboundPackets1_18.JOIN_GAME, new PacketRemapper() {

        @Override
        public void registerMap() {
            // Entity ID
            map(Type.INT);
            // Hardcore
            map(Type.BOOLEAN);
            // Gamemode
            map(Type.UNSIGNED_BYTE);
            // Previous Gamemode
            map(Type.BYTE);
            // Worlds
            map(Type.STRING_ARRAY);
            // Dimension registry
            map(Type.NBT);
            // Current dimension data
            map(Type.NBT);
            // World
            map(Type.STRING);
            // Seed
            map(Type.LONG);
            // Max players
            map(Type.VAR_INT);
            // Chunk radius
            map(Type.VAR_INT);
            // Read simulation distance
            read(Type.VAR_INT);
            handler(worldDataTrackerHandler(1));
            handler(wrapper -> {
                final CompoundTag registry = wrapper.get(Type.NBT, 0);
                final CompoundTag biomeRegistry = registry.get("minecraft:worldgen/biome");
                final ListTag biomes = biomeRegistry.get("value");
                for (final Tag biome : biomes.getValue()) {
                    final CompoundTag biomeCompound = ((CompoundTag) biome).get("element");
                    final StringTag category = biomeCompound.get("category");
                    if (category.getValue().equals("mountain")) {
                        category.setValue("extreme_hills");
                    }
                    // The client just needs something
                    biomeCompound.put("depth", new FloatTag(0.125F));
                    biomeCompound.put("scale", new FloatTag(0.05F));
                }
                // Track amount of biomes sent
                tracker(wrapper.user()).setBiomesSent(biomes.size());
            });
        }
    });
    protocol.registerClientbound(ClientboundPackets1_18.RESPAWN, new PacketRemapper() {

        @Override
        public void registerMap() {
            // Dimension data
            map(Type.NBT);
            // World
            map(Type.STRING);
            handler(worldDataTrackerHandler(0));
        }
    });
}
Also used : Particle(com.viaversion.viaversion.api.type.types.Particle) ClientboundPackets1_18(com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPackets1_18) MetaType(com.viaversion.viaversion.api.minecraft.metadata.MetaType) Tag(com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag) EntityType(com.viaversion.viaversion.api.minecraft.entities.EntityType) StringTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag) ListTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag) Types1_17(com.viaversion.viaversion.api.type.types.version.Types1_17) PacketRemapper(com.viaversion.viaversion.api.protocol.remapper.PacketRemapper) Type(com.viaversion.viaversion.api.type.Type) Types1_18(com.viaversion.viaversion.api.type.types.version.Types1_18) Entity1_17Types(com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types) Protocol1_17_1To1_18(com.viaversion.viabackwards.protocol.protocol1_17_1to1_18.Protocol1_17_1To1_18) CompoundTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag) EntityRewriter(com.viaversion.viabackwards.api.rewriters.EntityRewriter) FloatTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.FloatTag) StringTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag) FloatTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.FloatTag) PacketRemapper(com.viaversion.viaversion.api.protocol.remapper.PacketRemapper) Tag(com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag) StringTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag) ListTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag) CompoundTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag) FloatTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.FloatTag) ListTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag) CompoundTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag)

Aggregations

CompoundTag (com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag)19 ListTag (com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag)19 Tag (com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag)17 StringTag (com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag)16 IntTag (com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag)9 ByteTag (com.viaversion.viaversion.libs.opennbt.tag.builtin.ByteTag)7 NumberTag (com.viaversion.viaversion.libs.opennbt.tag.builtin.NumberTag)7 ShortTag (com.viaversion.viaversion.libs.opennbt.tag.builtin.ShortTag)7 PacketRemapper (com.viaversion.viaversion.api.protocol.remapper.PacketRemapper)4 Type (com.viaversion.viaversion.api.type.Type)4 ArrayList (java.util.ArrayList)3 ViaBackwards (com.viaversion.viabackwards.ViaBackwards)2 BackwardsProtocol (com.viaversion.viabackwards.api.BackwardsProtocol)2 EntityRewriter (com.viaversion.viabackwards.api.rewriters.EntityRewriter)2 Entity1_17Types (com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types)2 EntityType (com.viaversion.viaversion.api.minecraft.entities.EntityType)2 MetaType (com.viaversion.viaversion.api.minecraft.metadata.MetaType)2 Particle (com.viaversion.viaversion.api.type.types.Particle)2 Types1_17 (com.viaversion.viaversion.api.type.types.version.Types1_17)2 ClientboundPackets1_17 (com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ClientboundPackets1_17)2