ViaVersion/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/data/SpawnEggRewriter.java

94 lines
3.8 KiB
Java

/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2023 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_13to1_12_2.data;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import java.util.Optional;
public class SpawnEggRewriter {
private static final BiMap<String, Integer> spawnEggs = HashBiMap.create();
static {
// Class yz.java in 18w14b
// Register spawn eggs (generated with GT)
registerSpawnEgg("minecraft:bat");
registerSpawnEgg("minecraft:blaze");
registerSpawnEgg("minecraft:cave_spider");
registerSpawnEgg("minecraft:chicken");
registerSpawnEgg("minecraft:cow");
registerSpawnEgg("minecraft:creeper");
registerSpawnEgg("minecraft:donkey");
registerSpawnEgg("minecraft:elder_guardian");
registerSpawnEgg("minecraft:enderman");
registerSpawnEgg("minecraft:endermite");
registerSpawnEgg("minecraft:evocation_illager");
registerSpawnEgg("minecraft:ghast");
registerSpawnEgg("minecraft:guardian");
registerSpawnEgg("minecraft:horse");
registerSpawnEgg("minecraft:husk");
registerSpawnEgg("minecraft:llama");
registerSpawnEgg("minecraft:magma_cube");
registerSpawnEgg("minecraft:mooshroom");
registerSpawnEgg("minecraft:mule");
registerSpawnEgg("minecraft:ocelot");
registerSpawnEgg("minecraft:parrot");
registerSpawnEgg("minecraft:pig");
registerSpawnEgg("minecraft:polar_bear");
registerSpawnEgg("minecraft:rabbit");
registerSpawnEgg("minecraft:sheep");
registerSpawnEgg("minecraft:shulker");
registerSpawnEgg("minecraft:silverfish");
registerSpawnEgg("minecraft:skeleton");
registerSpawnEgg("minecraft:skeleton_horse");
registerSpawnEgg("minecraft:slime");
registerSpawnEgg("minecraft:spider");
registerSpawnEgg("minecraft:squid");
registerSpawnEgg("minecraft:stray");
registerSpawnEgg("minecraft:vex");
registerSpawnEgg("minecraft:villager");
registerSpawnEgg("minecraft:vindication_illager");
registerSpawnEgg("minecraft:witch");
registerSpawnEgg("minecraft:wither_skeleton");
registerSpawnEgg("minecraft:wolf");
registerSpawnEgg("minecraft:zombie");
registerSpawnEgg("minecraft:zombie_horse");
registerSpawnEgg("minecraft:zombie_pigman");
registerSpawnEgg("minecraft:zombie_villager");
}
private static void registerSpawnEgg(String key) {
spawnEggs.put(key, spawnEggs.size());
}
// Make it a non-existing block id
public static int getSpawnEggId(String entityIdentifier) {
// Fallback to bat
if (!spawnEggs.containsKey(entityIdentifier))
//return 25100288;
return -1;
return (383 << 16 | (spawnEggs.get(entityIdentifier) & 0xFFFF));
}
public static Optional<String> getEntityId(int spawnEggId) {
if (spawnEggId >> 16 != 383) return Optional.empty();
return Optional.ofNullable(spawnEggs.inverse().get(spawnEggId & 0xFFFF));
}
}