diff --git a/src/main/java/com/minelittlepony/client/mixin/MixinBlockEntityRenderDispatcher.java b/src/main/java/com/minelittlepony/client/mixin/MixinBlockEntityRenderDispatcher.java new file mode 100644 index 00000000..87e52736 --- /dev/null +++ b/src/main/java/com/minelittlepony/client/mixin/MixinBlockEntityRenderDispatcher.java @@ -0,0 +1,17 @@ +package com.minelittlepony.client.mixin; + +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; +import net.minecraft.client.render.block.entity.BlockEntityRenderer; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(BlockEntityRenderDispatcher.class) +public interface MixinBlockEntityRenderDispatcher { + + @Accessor("renderers") + Map, BlockEntityRenderer> getRenderers(); +} diff --git a/src/main/java/com/minelittlepony/client/model/entities/ModelVillagerPony.java b/src/main/java/com/minelittlepony/client/model/entities/ModelVillagerPony.java index fe6357a3..cc9898a9 100644 --- a/src/main/java/com/minelittlepony/client/model/entities/ModelVillagerPony.java +++ b/src/main/java/com/minelittlepony/client/model/entities/ModelVillagerPony.java @@ -1,5 +1,6 @@ package com.minelittlepony.client.model.entities; +import net.minecraft.client.render.entity.model.ModelWithHat; import net.minecraft.entity.LivingEntity; import net.minecraft.village.VillagerDataContainer; import net.minecraft.village.VillagerProfession; @@ -8,7 +9,7 @@ import com.minelittlepony.client.model.ModelMobPony; import com.minelittlepony.client.util.render.plane.PlaneRenderer; import com.minelittlepony.pony.meta.Wearable; -public class ModelVillagerPony extends ModelMobPony { +public class ModelVillagerPony extends ModelMobPony implements ModelWithHat { public PlaneRenderer apron; public PlaneRenderer trinket; @@ -76,4 +77,9 @@ public class ModelVillagerPony e .around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z) .south(-2, -4, -9, 4, 5, stretch); } + + @Override + public void setHatVisible(boolean visible) { + + } } diff --git a/src/main/java/com/minelittlepony/client/render/entities/RenderPonyVillager.java b/src/main/java/com/minelittlepony/client/render/entities/RenderPonyVillager.java index c55db6c6..8a422052 100644 --- a/src/main/java/com/minelittlepony/client/render/entities/RenderPonyVillager.java +++ b/src/main/java/com/minelittlepony/client/render/entities/RenderPonyVillager.java @@ -5,25 +5,40 @@ import com.minelittlepony.util.resources.FormattedTextureSupplier; import com.minelittlepony.util.resources.ITextureSupplier; import com.mojang.blaze3d.platform.GlStateManager; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.entity.EntityRenderDispatcher; +import net.minecraft.client.render.entity.feature.VillagerClothingFeatureRenderer; import net.minecraft.entity.passive.VillagerEntity; +import net.minecraft.resource.ReloadableResourceManager; import net.minecraft.util.Identifier; -import net.minecraft.village.VillagerData; public class RenderPonyVillager extends RenderPonyMob.Caster> { - private static final ITextureSupplier FORMATTER = new FormattedTextureSupplier("minelittlepony", "textures/entity/villager/%s_pony.png"); + private static final ITextureSupplier FORMATTER = new FormattedTextureSupplier("minelittlepony", "textures/entity/villager/%s.png"); - private static final Identifier DEFAULT = FORMATTER.supplyTexture("villager"); - private static final Identifier EGG = FORMATTER.supplyTexture("silly"); - private static final Identifier EGG_2 = FORMATTER.supplyTexture("tiny_silly"); - - private static final ITextureSupplier PROFESSIONS = new VillagerProfessionTextureCache(FORMATTER, DEFAULT); + private static final ITextureSupplier PROFESSIONS = new VillagerProfessionTextureCache<>(FORMATTER); public RenderPonyVillager(EntityRenderDispatcher manager) { super(manager, new ModelVillagerPony<>()); } + @Override + protected void addLayers() { + ReloadableResourceManager resManager = (ReloadableResourceManager)MinecraftClient.getInstance().getResourceManager(); + + addFeature(new VillagerClothingFeatureRenderer<>(this, resManager, "villager")); + } + + @Override + public void bindTexture(Identifier texture) { + + if (!"minelittlepony".contentEquals(texture.getNamespace())) { + texture = new Identifier("minelittlepony", texture.getPath()); + } + + super.bindTexture(texture); + } + @Override public void scale(VillagerEntity villager, float ticks) { super.scale(villager, ticks); @@ -32,16 +47,6 @@ public class RenderPonyVillager extends RenderPonyMob.Caster { - private static final ITextureSupplier FORMATTER = new FormattedTextureSupplier("minelittlepony", "textures/entity/zombie_villager/zombie_%s_pony.png"); + private static final ITextureSupplier FORMATTER = new FormattedTextureSupplier("minelittlepony", "textures/entity/zombie_villager/zombie_%s.png"); - private static final Identifier DEFAULT = FORMATTER.supplyTexture("villager"); - private static final Identifier EGG = FORMATTER.supplyTexture("silly"); - private static final Identifier EGG_2 = FORMATTER.supplyTexture("tiny_silly"); - - private static final ITextureSupplier PROFESSIONS = new VillagerProfessionTextureCache(FORMATTER, DEFAULT); + private static final ITextureSupplier PROFESSIONS = new VillagerProfessionTextureCache<>(FORMATTER); public RenderPonyZombieVillager(EntityRenderDispatcher manager) { super(manager, new ModelZombieVillagerPony()); } @Override - public Identifier findTexture(ZombieVillagerEntity entity) { - if (entity.hasCustomName()) { - String name = entity.getCustomName().getString(); - if ("Derpy".equals(name) || (entity.isBaby() && "Dinky".equals(name))) { - if (entity.isBaby()) { - return EGG_2; - } - return EGG; - } + protected void addLayers() { + ReloadableResourceManager resManager = (ReloadableResourceManager)MinecraftClient.getInstance().getResourceManager(); + + addFeature(new VillagerClothingFeatureRenderer<>(this, resManager, "zombie_villager")); + } + + @Override + public void bindTexture(Identifier texture) { + + if (!"minelittlepony".contentEquals(texture.getNamespace())) { + texture = new Identifier("minelittlepony", texture.getPath()); } - return PROFESSIONS.supplyTexture(entity.getVillagerData()); + super.bindTexture(texture); + } + + + @Override + public Identifier findTexture(ZombieVillagerEntity entity) { + return PROFESSIONS.supplyTexture(entity); } @Override diff --git a/src/main/java/com/minelittlepony/client/render/entities/VillagerProfessionTextureCache.java b/src/main/java/com/minelittlepony/client/render/entities/VillagerProfessionTextureCache.java index 90dc488a..b16ad097 100644 --- a/src/main/java/com/minelittlepony/client/render/entities/VillagerProfessionTextureCache.java +++ b/src/main/java/com/minelittlepony/client/render/entities/VillagerProfessionTextureCache.java @@ -1,31 +1,34 @@ package com.minelittlepony.client.render.entities; import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.LivingEntity; import net.minecraft.util.Identifier; import net.minecraft.village.VillagerData; +import net.minecraft.village.VillagerDataContainer; +import net.minecraft.village.VillagerProfession; +import net.minecraft.village.VillagerType; import com.minelittlepony.MineLittlePony; import com.minelittlepony.util.resources.ITextureSupplier; -import com.minelittlepony.util.resources.ProfessionStringMapper; import java.io.IOException; import java.util.HashMap; import java.util.Map; -import java.util.function.Function; /** * Cached pool of villager textures. */ -class VillagerProfessionTextureCache implements ITextureSupplier { +class VillagerProfessionTextureCache implements ITextureSupplier { private final ITextureSupplier formatter; - private final Function keyMapper = new ProfessionStringMapper(); - private final Identifier fallback; private final Map cache = new HashMap<>(); + private final Identifier egg; + private final Identifier egg2; + /** * Creates a new profession cache * @@ -33,17 +36,41 @@ class VillagerProfessionTextureCache implements ITextureSupplier { * @param keyMapper Mapper to convert integer ids into a string value for format insertion * @param fallback The default if any generated textures fail to load. This is stored in place of failing textures. */ - public VillagerProfessionTextureCache(ITextureSupplier formatter, Identifier fallback) { + public VillagerProfessionTextureCache(ITextureSupplier formatter) { this.formatter = formatter; - this.fallback = fallback; + this.fallback = formatter.supplyTexture("villager_pony"); + this.egg = formatter.supplyTexture("silly_pony"); + this.egg2 = formatter.supplyTexture("tiny_silly_pony"); } @Override - public Identifier supplyTexture(VillagerData data) { - return cache.computeIfAbsent(keyMapper.apply(data), this::getModProfessionResource); + public Identifier supplyTexture(T entity) { + if (entity.hasCustomName()) { + String name = entity.getCustomName().getString(); + if ("Derpy".equals(name) || (entity.isBaby() && "Dinky".equals(name))) { + if (entity.isBaby()) { + return egg2; + } + return egg; + } + } + + if (entity.getVillagerData().getProfession() == VillagerProfession.NONE) { + return fallback; + } + + return cache.computeIfAbsent(formatTexture(entity), this::getTexture); } - private Identifier getModProfessionResource(String professionId) { + public String formatTexture(T entity) { + VillagerData t = entity.getVillagerData(); + VillagerType type = t.getType(); + VillagerProfession profession = t.getProfession(); + + return String.format("pony/%s/%s", type, profession.toString()); + } + + private Identifier getTexture(String professionId) { Identifier generated = formatter.supplyTexture(professionId); try { diff --git a/src/main/java/com/minelittlepony/util/resources/ProfessionStringMapper.java b/src/main/java/com/minelittlepony/util/resources/ProfessionStringMapper.java deleted file mode 100644 index 3e1b4ad2..00000000 --- a/src/main/java/com/minelittlepony/util/resources/ProfessionStringMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.minelittlepony.util.resources; - -import net.minecraft.village.VillagerData; - -import java.util.function.Function; - -public class ProfessionStringMapper implements Function { - - @Override - public String apply(VillagerData t) { - return String.format("level_%d_%s", t.getLevel(), t.getProfession().toString()); - } - -} diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/armorer.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/armorer.png new file mode 100644 index 00000000..7155fca0 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/armorer.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/butcher_pony.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/butcher.png similarity index 68% rename from src/main/resources/assets/minelittlepony/textures/entity/villager/butcher_pony.png rename to src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/butcher.png index b4550836..9c5bab05 100644 Binary files a/src/main/resources/assets/minelittlepony/textures/entity/villager/butcher_pony.png and b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/butcher.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/cartographer.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/cartographer.png new file mode 100644 index 00000000..d9abcdc7 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/cartographer.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/librarian_pony.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/cleric.png similarity index 65% rename from src/main/resources/assets/minelittlepony/textures/entity/villager/librarian_pony.png rename to src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/cleric.png index f2ee4256..3c7e0948 100644 Binary files a/src/main/resources/assets/minelittlepony/textures/entity/villager/librarian_pony.png and b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/cleric.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/farmer.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/farmer.png new file mode 100644 index 00000000..be47c913 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/farmer.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/fisherman.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/fisherman.png new file mode 100644 index 00000000..c87278fe Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/fisherman.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/leatherworker.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/leatherworker.png new file mode 100644 index 00000000..627bf378 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/leatherworker.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/priest_pony.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/librarian.png similarity index 64% rename from src/main/resources/assets/minelittlepony/textures/entity/villager/priest_pony.png rename to src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/librarian.png index aceebc99..b6fa6196 100644 Binary files a/src/main/resources/assets/minelittlepony/textures/entity/villager/priest_pony.png and b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/librarian.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/mason.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/mason.png new file mode 100644 index 00000000..280e1cd7 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/mason.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/nitwit.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/nitwit.png new file mode 100644 index 00000000..f4e97bca Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/nitwit.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/shepherd.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/shepherd.png new file mode 100644 index 00000000..7413141b Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/shepherd.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/smith_pony.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/toolsmith.png similarity index 62% rename from src/main/resources/assets/minelittlepony/textures/entity/villager/smith_pony.png rename to src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/toolsmith.png index 429da337..d2a2b191 100644 Binary files a/src/main/resources/assets/minelittlepony/textures/entity/villager/smith_pony.png and b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/toolsmith.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/weaponsmith.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/weaponsmith.png new file mode 100644 index 00000000..b473447e Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/pony/plains/weaponsmith.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/armorer.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/armorer.png new file mode 100644 index 00000000..eb676be4 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/armorer.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/butcher.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/butcher.png new file mode 100644 index 00000000..6f9e1bb0 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/butcher.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/cartographer.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/cartographer.png new file mode 100644 index 00000000..2e243c6f Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/cartographer.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/cleric.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/cleric.png new file mode 100644 index 00000000..cd6427ba Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/cleric.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/farmer.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/farmer.png new file mode 100644 index 00000000..efd8a89d Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/farmer.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/fisherman.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/fisherman.png new file mode 100644 index 00000000..efd8a89d Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/fisherman.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/fletcher.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/fletcher.png new file mode 100644 index 00000000..efd8a89d Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/fletcher.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/leatherworker.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/leatherworker.png new file mode 100644 index 00000000..6f9e1bb0 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/leatherworker.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/librarian.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/librarian.png new file mode 100644 index 00000000..2e243c6f Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/librarian.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/mason.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/mason.png new file mode 100644 index 00000000..eb676be4 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/mason.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/nitwit.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/nitwit.png new file mode 100644 index 00000000..6f9e1bb0 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/nitwit.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/shepherd.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/shepherd.png new file mode 100644 index 00000000..efd8a89d Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/shepherd.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/toolsmith.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/toolsmith.png new file mode 100644 index 00000000..eb676be4 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/toolsmith.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/weaponsmith.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/weaponsmith.png new file mode 100644 index 00000000..eb676be4 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession/weaponsmith.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/diamond.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/diamond.png new file mode 100644 index 00000000..d0e36764 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/diamond.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/emerald.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/emerald.png new file mode 100644 index 00000000..a57eddf9 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/emerald.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/gold.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/gold.png new file mode 100644 index 00000000..60c4789f Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/gold.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/iron.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/iron.png new file mode 100644 index 00000000..94cd4147 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/iron.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/stone.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/stone.png new file mode 100644 index 00000000..0daf8bb9 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/profession_level/stone.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/type/desert.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/type/desert.png new file mode 100644 index 00000000..ad0a6759 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/type/desert.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/type/jungle.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/type/jungle.png new file mode 100644 index 00000000..c03a982c Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/type/jungle.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/type/plains.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/type/plains.png new file mode 100644 index 00000000..53b0cb1a Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/type/plains.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/farmer_pony.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/type/savanna.png similarity index 59% rename from src/main/resources/assets/minelittlepony/textures/entity/villager/farmer_pony.png rename to src/main/resources/assets/minelittlepony/textures/entity/villager/type/savanna.png index 0485625a..9cd99d39 100644 Binary files a/src/main/resources/assets/minelittlepony/textures/entity/villager/farmer_pony.png and b/src/main/resources/assets/minelittlepony/textures/entity/villager/type/savanna.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/type/snow.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/type/snow.png new file mode 100644 index 00000000..25efe20e Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/type/snow.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/type/swamp.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/type/swamp.png new file mode 100644 index 00000000..b4c91eea Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/type/swamp.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/villager/type/taiga.png b/src/main/resources/assets/minelittlepony/textures/entity/villager/type/taiga.png new file mode 100644 index 00000000..5d3a0422 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/villager/type/taiga.png differ