package net.minecraft.client.model.geom; import com.google.common.collect.Sets; import java.util.Set; import java.util.stream.Stream; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.vehicle.Boat; import net.minecraft.world.level.block.state.properties.WoodType; @Environment(EnvType.CLIENT) public class ModelLayers { private static final String DEFAULT_LAYER = "main"; private static final Set ALL_MODELS = Sets.newHashSet(); public static final ModelLayerLocation ALLAY = register("allay"); public static final ModelLayerLocation ARMADILLO = register("armadillo"); public static final ModelLayerLocation ARMOR_STAND = register("armor_stand"); public static final ModelLayerLocation ARMOR_STAND_INNER_ARMOR = registerInnerArmor("armor_stand"); public static final ModelLayerLocation ARMOR_STAND_OUTER_ARMOR = registerOuterArmor("armor_stand"); public static final ModelLayerLocation AXOLOTL = register("axolotl"); public static final ModelLayerLocation BANNER = register("banner"); public static final ModelLayerLocation BAT = register("bat"); public static final ModelLayerLocation BED_FOOT = register("bed_foot"); public static final ModelLayerLocation BED_HEAD = register("bed_head"); public static final ModelLayerLocation BEE = register("bee"); public static final ModelLayerLocation BELL = register("bell"); public static final ModelLayerLocation BLAZE = register("blaze"); public static final ModelLayerLocation BOGGED = register("bogged"); public static final ModelLayerLocation BOGGED_INNER_ARMOR = registerInnerArmor("bogged"); public static final ModelLayerLocation BOGGED_OUTER_ARMOR = registerOuterArmor("bogged"); public static final ModelLayerLocation BOGGED_OUTER_LAYER = register("bogged", "outer"); public static final ModelLayerLocation BOOK = register("book"); public static final ModelLayerLocation BREEZE = register("breeze"); public static final ModelLayerLocation BREEZE_WIND = register("breeze_wind"); public static final ModelLayerLocation CAT = register("cat"); public static final ModelLayerLocation CAT_COLLAR = register("cat", "collar"); public static final ModelLayerLocation CAMEL = register("camel"); public static final ModelLayerLocation CAVE_SPIDER = register("cave_spider"); public static final ModelLayerLocation CHEST = register("chest"); public static final ModelLayerLocation CHEST_MINECART = register("chest_minecart"); public static final ModelLayerLocation CHICKEN = register("chicken"); public static final ModelLayerLocation COD = register("cod"); public static final ModelLayerLocation COMMAND_BLOCK_MINECART = register("command_block_minecart"); public static final ModelLayerLocation CONDUIT_CAGE = register("conduit", "cage"); public static final ModelLayerLocation CONDUIT_EYE = register("conduit", "eye"); public static final ModelLayerLocation CONDUIT_SHELL = register("conduit", "shell"); public static final ModelLayerLocation CONDUIT_WIND = register("conduit", "wind"); public static final ModelLayerLocation COW = register("cow"); public static final ModelLayerLocation CREEPER = register("creeper"); public static final ModelLayerLocation CREEPER_ARMOR = register("creeper", "armor"); public static final ModelLayerLocation CREEPER_HEAD = register("creeper_head"); public static final ModelLayerLocation DECORATED_POT_BASE = register("decorated_pot_base"); public static final ModelLayerLocation DECORATED_POT_SIDES = register("decorated_pot_sides"); public static final ModelLayerLocation DOLPHIN = register("dolphin"); public static final ModelLayerLocation DONKEY = register("donkey"); public static final ModelLayerLocation DOUBLE_CHEST_LEFT = register("double_chest_left"); public static final ModelLayerLocation DOUBLE_CHEST_RIGHT = register("double_chest_right"); public static final ModelLayerLocation DRAGON_SKULL = register("dragon_skull"); public static final ModelLayerLocation DROWNED = register("drowned"); public static final ModelLayerLocation DROWNED_INNER_ARMOR = registerInnerArmor("drowned"); public static final ModelLayerLocation DROWNED_OUTER_ARMOR = registerOuterArmor("drowned"); public static final ModelLayerLocation DROWNED_OUTER_LAYER = register("drowned", "outer"); public static final ModelLayerLocation ELDER_GUARDIAN = register("elder_guardian"); public static final ModelLayerLocation ELYTRA = register("elytra"); public static final ModelLayerLocation ENDERMAN = register("enderman"); public static final ModelLayerLocation ENDERMITE = register("endermite"); public static final ModelLayerLocation ENDER_DRAGON = register("ender_dragon"); public static final ModelLayerLocation END_CRYSTAL = register("end_crystal"); public static final ModelLayerLocation EVOKER = register("evoker"); public static final ModelLayerLocation EVOKER_FANGS = register("evoker_fangs"); public static final ModelLayerLocation FOX = register("fox"); public static final ModelLayerLocation FROG = register("frog"); public static final ModelLayerLocation FURNACE_MINECART = register("furnace_minecart"); public static final ModelLayerLocation GHAST = register("ghast"); public static final ModelLayerLocation GIANT = register("giant"); public static final ModelLayerLocation GIANT_INNER_ARMOR = registerInnerArmor("giant"); public static final ModelLayerLocation GIANT_OUTER_ARMOR = registerOuterArmor("giant"); public static final ModelLayerLocation GLOW_SQUID = register("glow_squid"); public static final ModelLayerLocation GOAT = register("goat"); public static final ModelLayerLocation GUARDIAN = register("guardian"); public static final ModelLayerLocation HOGLIN = register("hoglin"); public static final ModelLayerLocation HOPPER_MINECART = register("hopper_minecart"); public static final ModelLayerLocation HORSE = register("horse"); public static final ModelLayerLocation HORSE_ARMOR = register("horse_armor"); public static final ModelLayerLocation HUSK = register("husk"); public static final ModelLayerLocation HUSK_INNER_ARMOR = registerInnerArmor("husk"); public static final ModelLayerLocation HUSK_OUTER_ARMOR = registerOuterArmor("husk"); public static final ModelLayerLocation ILLUSIONER = register("illusioner"); public static final ModelLayerLocation IRON_GOLEM = register("iron_golem"); public static final ModelLayerLocation LEASH_KNOT = register("leash_knot"); public static final ModelLayerLocation LLAMA = register("llama"); public static final ModelLayerLocation LLAMA_DECOR = register("llama", "decor"); public static final ModelLayerLocation LLAMA_SPIT = register("llama_spit"); public static final ModelLayerLocation MAGMA_CUBE = register("magma_cube"); public static final ModelLayerLocation MINECART = register("minecart"); public static final ModelLayerLocation MOOSHROOM = register("mooshroom"); public static final ModelLayerLocation MULE = register("mule"); public static final ModelLayerLocation OCELOT = register("ocelot"); public static final ModelLayerLocation PANDA = register("panda"); public static final ModelLayerLocation PARROT = register("parrot"); public static final ModelLayerLocation PHANTOM = register("phantom"); public static final ModelLayerLocation PIG = register("pig"); public static final ModelLayerLocation PIGLIN = register("piglin"); public static final ModelLayerLocation PIGLIN_BRUTE = register("piglin_brute"); public static final ModelLayerLocation PIGLIN_BRUTE_INNER_ARMOR = registerInnerArmor("piglin_brute"); public static final ModelLayerLocation PIGLIN_BRUTE_OUTER_ARMOR = registerOuterArmor("piglin_brute"); public static final ModelLayerLocation PIGLIN_HEAD = register("piglin_head"); public static final ModelLayerLocation PIGLIN_INNER_ARMOR = registerInnerArmor("piglin"); public static final ModelLayerLocation PIGLIN_OUTER_ARMOR = registerOuterArmor("piglin"); public static final ModelLayerLocation PIG_SADDLE = register("pig", "saddle"); public static final ModelLayerLocation PILLAGER = register("pillager"); public static final ModelLayerLocation PLAYER = register("player"); public static final ModelLayerLocation PLAYER_HEAD = register("player_head"); public static final ModelLayerLocation PLAYER_INNER_ARMOR = registerInnerArmor("player"); public static final ModelLayerLocation PLAYER_OUTER_ARMOR = registerOuterArmor("player"); public static final ModelLayerLocation PLAYER_SLIM = register("player_slim"); public static final ModelLayerLocation PLAYER_SLIM_INNER_ARMOR = registerInnerArmor("player_slim"); public static final ModelLayerLocation PLAYER_SLIM_OUTER_ARMOR = registerOuterArmor("player_slim"); public static final ModelLayerLocation PLAYER_SPIN_ATTACK = register("spin_attack"); public static final ModelLayerLocation POLAR_BEAR = register("polar_bear"); public static final ModelLayerLocation PUFFERFISH_BIG = register("pufferfish_big"); public static final ModelLayerLocation PUFFERFISH_MEDIUM = register("pufferfish_medium"); public static final ModelLayerLocation PUFFERFISH_SMALL = register("pufferfish_small"); public static final ModelLayerLocation RABBIT = register("rabbit"); public static final ModelLayerLocation RAVAGER = register("ravager"); public static final ModelLayerLocation SALMON = register("salmon"); public static final ModelLayerLocation SHEEP = register("sheep"); public static final ModelLayerLocation SHEEP_FUR = register("sheep", "fur"); public static final ModelLayerLocation SHIELD = register("shield"); public static final ModelLayerLocation SHULKER = register("shulker"); public static final ModelLayerLocation SHULKER_BULLET = register("shulker_bullet"); public static final ModelLayerLocation SILVERFISH = register("silverfish"); public static final ModelLayerLocation SKELETON = register("skeleton"); public static final ModelLayerLocation SKELETON_HORSE = register("skeleton_horse"); public static final ModelLayerLocation SKELETON_INNER_ARMOR = registerInnerArmor("skeleton"); public static final ModelLayerLocation SKELETON_OUTER_ARMOR = registerOuterArmor("skeleton"); public static final ModelLayerLocation SKELETON_SKULL = register("skeleton_skull"); public static final ModelLayerLocation SLIME = register("slime"); public static final ModelLayerLocation SLIME_OUTER = register("slime", "outer"); public static final ModelLayerLocation SNIFFER = register("sniffer"); public static final ModelLayerLocation SNOW_GOLEM = register("snow_golem"); public static final ModelLayerLocation SPAWNER_MINECART = register("spawner_minecart"); public static final ModelLayerLocation SPIDER = register("spider"); public static final ModelLayerLocation SQUID = register("squid"); public static final ModelLayerLocation STRAY = register("stray"); public static final ModelLayerLocation STRAY_INNER_ARMOR = registerInnerArmor("stray"); public static final ModelLayerLocation STRAY_OUTER_ARMOR = registerOuterArmor("stray"); public static final ModelLayerLocation STRAY_OUTER_LAYER = register("stray", "outer"); public static final ModelLayerLocation STRIDER = register("strider"); public static final ModelLayerLocation STRIDER_SADDLE = register("strider", "saddle"); public static final ModelLayerLocation TADPOLE = register("tadpole"); public static final ModelLayerLocation TNT_MINECART = register("tnt_minecart"); public static final ModelLayerLocation TRADER_LLAMA = register("trader_llama"); public static final ModelLayerLocation TRIDENT = register("trident"); public static final ModelLayerLocation TROPICAL_FISH_LARGE = register("tropical_fish_large"); public static final ModelLayerLocation TROPICAL_FISH_LARGE_PATTERN = register("tropical_fish_large", "pattern"); public static final ModelLayerLocation TROPICAL_FISH_SMALL = register("tropical_fish_small"); public static final ModelLayerLocation TROPICAL_FISH_SMALL_PATTERN = register("tropical_fish_small", "pattern"); public static final ModelLayerLocation TURTLE = register("turtle"); public static final ModelLayerLocation VEX = register("vex"); public static final ModelLayerLocation VILLAGER = register("villager"); public static final ModelLayerLocation VINDICATOR = register("vindicator"); public static final ModelLayerLocation WARDEN = register("warden"); public static final ModelLayerLocation WANDERING_TRADER = register("wandering_trader"); public static final ModelLayerLocation WIND_CHARGE = register("wind_charge"); public static final ModelLayerLocation WITCH = register("witch"); public static final ModelLayerLocation WITHER = register("wither"); public static final ModelLayerLocation WITHER_ARMOR = register("wither", "armor"); public static final ModelLayerLocation WITHER_SKELETON = register("wither_skeleton"); public static final ModelLayerLocation WITHER_SKELETON_INNER_ARMOR = registerInnerArmor("wither_skeleton"); public static final ModelLayerLocation WITHER_SKELETON_OUTER_ARMOR = registerOuterArmor("wither_skeleton"); public static final ModelLayerLocation WITHER_SKELETON_SKULL = register("wither_skeleton_skull"); public static final ModelLayerLocation WITHER_SKULL = register("wither_skull"); public static final ModelLayerLocation WOLF = register("wolf"); public static final ModelLayerLocation WOLF_ARMOR = register("wolf_armor"); public static final ModelLayerLocation ZOGLIN = register("zoglin"); public static final ModelLayerLocation ZOMBIE = register("zombie"); public static final ModelLayerLocation ZOMBIE_HEAD = register("zombie_head"); public static final ModelLayerLocation ZOMBIE_HORSE = register("zombie_horse"); public static final ModelLayerLocation ZOMBIE_INNER_ARMOR = registerInnerArmor("zombie"); public static final ModelLayerLocation ZOMBIE_OUTER_ARMOR = registerOuterArmor("zombie"); public static final ModelLayerLocation ZOMBIE_VILLAGER = register("zombie_villager"); public static final ModelLayerLocation ZOMBIE_VILLAGER_INNER_ARMOR = registerInnerArmor("zombie_villager"); public static final ModelLayerLocation ZOMBIE_VILLAGER_OUTER_ARMOR = registerOuterArmor("zombie_villager"); public static final ModelLayerLocation ZOMBIFIED_PIGLIN = register("zombified_piglin"); public static final ModelLayerLocation ZOMBIFIED_PIGLIN_INNER_ARMOR = registerInnerArmor("zombified_piglin"); public static final ModelLayerLocation ZOMBIFIED_PIGLIN_OUTER_ARMOR = registerOuterArmor("zombified_piglin"); private static ModelLayerLocation register(String path) { return register(path, "main"); } private static ModelLayerLocation register(String path, String model) { ModelLayerLocation modelLayerLocation = createLocation(path, model); if (!ALL_MODELS.add(modelLayerLocation)) { throw new IllegalStateException("Duplicate registration for " + modelLayerLocation); } else { return modelLayerLocation; } } private static ModelLayerLocation createLocation(String path, String model) { return new ModelLayerLocation(ResourceLocation.withDefaultNamespace(path), model); } private static ModelLayerLocation registerInnerArmor(String path) { return register(path, "inner_armor"); } private static ModelLayerLocation registerOuterArmor(String path) { return register(path, "outer_armor"); } public static ModelLayerLocation createRaftModelName(Boat.Type type) { return createLocation("raft/" + type.getName(), "main"); } public static ModelLayerLocation createChestRaftModelName(Boat.Type type) { return createLocation("chest_raft/" + type.getName(), "main"); } public static ModelLayerLocation createBoatModelName(Boat.Type type) { return createLocation("boat/" + type.getName(), "main"); } public static ModelLayerLocation createChestBoatModelName(Boat.Type type) { return createLocation("chest_boat/" + type.getName(), "main"); } public static ModelLayerLocation createSignModelName(WoodType woodType) { return createLocation("sign/" + woodType.name(), "main"); } public static ModelLayerLocation createHangingSignModelName(WoodType woodType) { return createLocation("hanging_sign/" + woodType.name(), "main"); } public static Stream getKnownLocations() { return ALL_MODELS.stream(); } }