package net.minecraft.world.item.equipment; import java.util.Map; import java.util.Optional; import java.util.Map.Entry; import java.util.function.BiConsumer; import net.minecraft.Util; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.DyeColor; public interface EquipmentModels { ResourceLocation LEATHER = ResourceLocation.withDefaultNamespace("leather"); ResourceLocation CHAINMAIL = ResourceLocation.withDefaultNamespace("chainmail"); ResourceLocation IRON = ResourceLocation.withDefaultNamespace("iron"); ResourceLocation GOLD = ResourceLocation.withDefaultNamespace("gold"); ResourceLocation DIAMOND = ResourceLocation.withDefaultNamespace("diamond"); ResourceLocation TURTLE_SCUTE = ResourceLocation.withDefaultNamespace("turtle_scute"); ResourceLocation NETHERITE = ResourceLocation.withDefaultNamespace("netherite"); ResourceLocation ARMADILLO_SCUTE = ResourceLocation.withDefaultNamespace("armadillo_scute"); ResourceLocation ELYTRA = ResourceLocation.withDefaultNamespace("elytra"); Map CARPETS = Util.makeEnumMap( DyeColor.class, dyeColor -> ResourceLocation.withDefaultNamespace(dyeColor.getSerializedName() + "_carpet") ); ResourceLocation TRADER_LLAMA = ResourceLocation.withDefaultNamespace("trader_llama"); static void bootstrap(BiConsumer output) { output.accept( LEATHER, EquipmentModel.builder() .addHumanoidLayers(ResourceLocation.withDefaultNamespace("leather"), true) .addHumanoidLayers(ResourceLocation.withDefaultNamespace("leather_overlay"), false) .addLayers(EquipmentModel.LayerType.HORSE_BODY, EquipmentModel.Layer.leatherDyeable(ResourceLocation.withDefaultNamespace("leather"), true)) .build() ); output.accept(CHAINMAIL, onlyHumanoid("chainmail")); output.accept(IRON, humanoidAndHorse("iron")); output.accept(GOLD, humanoidAndHorse("gold")); output.accept(DIAMOND, humanoidAndHorse("diamond")); output.accept(TURTLE_SCUTE, EquipmentModel.builder().addMainHumanoidLayer(ResourceLocation.withDefaultNamespace("turtle_scute"), false).build()); output.accept(NETHERITE, onlyHumanoid("netherite")); output.accept( ARMADILLO_SCUTE, EquipmentModel.builder() .addLayers(EquipmentModel.LayerType.WOLF_BODY, EquipmentModel.Layer.onlyIfDyed(ResourceLocation.withDefaultNamespace("armadillo_scute"), false)) .addLayers(EquipmentModel.LayerType.WOLF_BODY, EquipmentModel.Layer.onlyIfDyed(ResourceLocation.withDefaultNamespace("armadillo_scute_overlay"), true)) .build() ); output.accept( ELYTRA, EquipmentModel.builder() .addLayers(EquipmentModel.LayerType.WINGS, new EquipmentModel.Layer(ResourceLocation.withDefaultNamespace("elytra"), Optional.empty(), true)) .build() ); for (Entry entry : CARPETS.entrySet()) { DyeColor dyeColor = (DyeColor)entry.getKey(); ResourceLocation resourceLocation = (ResourceLocation)entry.getValue(); output.accept( resourceLocation, EquipmentModel.builder() .addLayers(EquipmentModel.LayerType.LLAMA_BODY, new EquipmentModel.Layer(ResourceLocation.withDefaultNamespace(dyeColor.getSerializedName()))) .build() ); } output.accept( TRADER_LLAMA, EquipmentModel.builder() .addLayers(EquipmentModel.LayerType.LLAMA_BODY, new EquipmentModel.Layer(ResourceLocation.withDefaultNamespace("trader_llama"))) .build() ); } private static EquipmentModel onlyHumanoid(String name) { return EquipmentModel.builder().addHumanoidLayers(ResourceLocation.withDefaultNamespace(name)).build(); } private static EquipmentModel humanoidAndHorse(String name) { return EquipmentModel.builder() .addHumanoidLayers(ResourceLocation.withDefaultNamespace(name)) .addLayers(EquipmentModel.LayerType.HORSE_BODY, EquipmentModel.Layer.leatherDyeable(ResourceLocation.withDefaultNamespace(name), false)) .build(); } }