177 lines
6.7 KiB
Java
177 lines
6.7 KiB
Java
/*
|
|
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
|
|
* Copyright (C) 2016-2024 ViaVersion and contributors
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
package com.viaversion.viaversion.protocols.protocol1_11to1_10;
|
|
|
|
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
|
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
|
import com.google.common.collect.BiMap;
|
|
import com.google.common.collect.HashBiMap;
|
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
|
import com.viaversion.viaversion.util.Key;
|
|
|
|
public class EntityIdRewriter {
|
|
private static final BiMap<String, String> oldToNewNames = HashBiMap.create();
|
|
|
|
static {
|
|
rewrite("AreaEffectCloud", "area_effect_cloud");
|
|
rewrite("ArmorStand", "armor_stand");
|
|
rewrite("Arrow", "arrow");
|
|
rewrite("Bat", "bat");
|
|
rewrite("Blaze", "blaze");
|
|
rewrite("Boat", "boat");
|
|
rewrite("CaveSpider", "cave_spider");
|
|
rewrite("Chicken", "chicken");
|
|
rewrite("Cow", "cow");
|
|
rewrite("Creeper", "creeper");
|
|
rewrite("Donkey", "donkey");
|
|
rewrite("DragonFireball", "dragon_fireball");
|
|
rewrite("ElderGuardian", "elder_guardian");
|
|
rewrite("EnderCrystal", "ender_crystal");
|
|
rewrite("EnderDragon", "ender_dragon");
|
|
rewrite("Enderman", "enderman");
|
|
rewrite("Endermite", "endermite");
|
|
rewrite("EntityHorse", "horse");
|
|
rewrite("EyeOfEnderSignal", "eye_of_ender_signal");
|
|
rewrite("FallingSand", "falling_block");
|
|
rewrite("Fireball", "fireball");
|
|
rewrite("FireworksRocketEntity", "fireworks_rocket");
|
|
rewrite("Ghast", "ghast");
|
|
rewrite("Giant", "giant");
|
|
rewrite("Guardian", "guardian");
|
|
rewrite("Husk", "husk");
|
|
rewrite("Item", "item");
|
|
rewrite("ItemFrame", "item_frame");
|
|
rewrite("LavaSlime", "magma_cube");
|
|
rewrite("LeashKnot", "leash_knot");
|
|
rewrite("MinecartChest", "chest_minecart");
|
|
rewrite("MinecartCommandBlock", "commandblock_minecart");
|
|
rewrite("MinecartFurnace", "furnace_minecart");
|
|
rewrite("MinecartHopper", "hopper_minecart");
|
|
rewrite("MinecartRideable", "minecart");
|
|
rewrite("MinecartSpawner", "spawner_minecart");
|
|
rewrite("MinecartTNT", "tnt_minecart");
|
|
rewrite("Mule", "mule");
|
|
rewrite("MushroomCow", "mooshroom");
|
|
rewrite("Ozelot", "ocelot");
|
|
rewrite("Painting", "painting");
|
|
rewrite("Pig", "pig");
|
|
rewrite("PigZombie", "zombie_pigman");
|
|
rewrite("PolarBear", "polar_bear");
|
|
rewrite("PrimedTnt", "tnt");
|
|
rewrite("Rabbit", "rabbit");
|
|
rewrite("Sheep", "sheep");
|
|
rewrite("Shulker", "shulker");
|
|
rewrite("ShulkerBullet", "shulker_bullet");
|
|
rewrite("Silverfish", "silverfish");
|
|
rewrite("Skeleton", "skeleton");
|
|
rewrite("SkeletonHorse", "skeleton_horse");
|
|
rewrite("Slime", "slime");
|
|
rewrite("SmallFireball", "small_fireball");
|
|
rewrite("Snowball", "snowball");
|
|
rewrite("SnowMan", "snowman");
|
|
rewrite("SpectralArrow", "spectral_arrow");
|
|
rewrite("Spider", "spider");
|
|
rewrite("Squid", "squid");
|
|
rewrite("Stray", "stray");
|
|
rewrite("ThrownEgg", "egg");
|
|
rewrite("ThrownEnderpearl", "ender_pearl");
|
|
rewrite("ThrownExpBottle", "xp_bottle");
|
|
rewrite("ThrownPotion", "potion");
|
|
rewrite("Villager", "villager");
|
|
rewrite("VillagerGolem", "villager_golem");
|
|
rewrite("Witch", "witch");
|
|
rewrite("WitherBoss", "wither");
|
|
rewrite("WitherSkeleton", "wither_skeleton");
|
|
rewrite("WitherSkull", "wither_skull");
|
|
rewrite("Wolf", "wolf");
|
|
rewrite("XPOrb", "xp_orb");
|
|
rewrite("Zombie", "zombie");
|
|
rewrite("ZombieHorse", "zombie_horse");
|
|
rewrite("ZombieVillager", "zombie_villager");
|
|
}
|
|
|
|
private static void rewrite(String oldName, String newName) {
|
|
oldToNewNames.put(oldName, Key.namespaced(newName));
|
|
}
|
|
|
|
public static void toClient(CompoundTag tag) {
|
|
toClient(tag, false);
|
|
}
|
|
|
|
public static void toClient(CompoundTag tag, boolean backwards) {
|
|
StringTag idTag = tag.getStringTag("id");
|
|
if (idTag != null) {
|
|
String newName = backwards ? oldToNewNames.inverse().get(idTag.getValue()) : oldToNewNames.get(idTag.getValue());
|
|
if (newName != null) {
|
|
idTag.setValue(newName);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void toClientSpawner(CompoundTag tag) {
|
|
toClientSpawner(tag, false);
|
|
}
|
|
|
|
public static void toClientSpawner(CompoundTag tag, boolean backwards) {
|
|
if (tag == null) return;
|
|
|
|
CompoundTag spawnDataTag = tag.getCompoundTag("SpawnData");
|
|
if (spawnDataTag != null) {
|
|
toClient(spawnDataTag, backwards);
|
|
}
|
|
}
|
|
|
|
public static void toClientItem(Item item) {
|
|
toClientItem(item, false);
|
|
}
|
|
|
|
public static void toClientItem(Item item, boolean backwards) {
|
|
if (hasEntityTag(item)) {
|
|
toClient(item.tag().getCompoundTag("EntityTag"), backwards);
|
|
}
|
|
if (item != null && item.amount() <= 0) item.setAmount(1);
|
|
}
|
|
|
|
public static void toServerItem(Item item) {
|
|
toServerItem(item, false);
|
|
}
|
|
|
|
public static void toServerItem(Item item, boolean backwards) {
|
|
if (!hasEntityTag(item)) return;
|
|
|
|
CompoundTag entityTag = item.tag().getCompoundTag("EntityTag");
|
|
StringTag idTag = entityTag.getStringTag("id");
|
|
if (idTag != null) {
|
|
String newName = backwards ? oldToNewNames.get(idTag.getValue()) : oldToNewNames.inverse().get(idTag.getValue());
|
|
if (newName != null) {
|
|
idTag.setValue(newName);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static boolean hasEntityTag(Item item) {
|
|
if (item == null || item.identifier() != 383) return false; // Monster Egg
|
|
|
|
CompoundTag tag = item.tag();
|
|
if (tag == null) return false;
|
|
|
|
CompoundTag entityTag = tag.getCompoundTag("EntityTag");
|
|
return entityTag != null && entityTag.getStringTag("id") != null;
|
|
}
|
|
}
|