enhance entity rendering: add support for villager levels, horse armor, llama decor, and saddle/chest states

This commit is contained in:
2026-06-21 15:32:53 +02:00
parent 094aa463c5
commit 5330948dbd
7 changed files with 170 additions and 11 deletions
+1 -1
View File
@@ -54,7 +54,7 @@ public class BlockEntityTestRender {
DefaultScreenRenderer renderer = new DefaultScreenRenderer(registry, tint, textures, baker, beBaker, log);
BlockData air = (BlockData) Proxy.newProxyInstance(BlockEntityTestRender.class.getClassLoader(),
new Class[]{BlockData.class}, (p, m, a) -> {
new Class<?>[]{BlockData.class}, (p, m, a) -> {
switch (m.getName()) {
case "getMaterial": return Material.AIR;
case "equals": return p == a[0];
+21 -3
View File
@@ -48,7 +48,24 @@ public class EntityTestRender {
Map.entry("parrot", "red"), Map.entry("rabbit", "brown"), Map.entry("horse", "white"),
Map.entry("llama", "creamy"), Map.entry("trader_llama", "creamy"), Map.entry("fox", "red"),
Map.entry("mooshroom", "red"), Map.entry("frog", "temperate"), Map.entry("panda", "normal"),
Map.entry("cow", "temperate"), Map.entry("pig", "temperate"), Map.entry("chicken", "temperate")
Map.entry("cow", "temperate"), Map.entry("pig", "temperate"), Map.entry("chicken", "temperate"),
Map.entry("villager", "taiga"), Map.entry("zombie_villager", "swamp")
);
// Villager profession / level for the standalone render (biome type comes from VAR above).
static final Map<String, String> PROF = Map.ofEntries(
Map.entry("villager", "librarian"), Map.entry("zombie_villager", "farmer")
);
static final Map<String, Integer> LVL = Map.ofEntries(
Map.entry("villager", 5)
);
// Horse/llama/donkey equipment for the standalone render.
static final Map<String, String> MARK = Map.of("horse", "blackdots"); // coat markings
static final java.util.Set<String> SADDLE = java.util.Set.of("horse", "donkey", "mule");
static final java.util.Set<String> CHEST = java.util.Set.of("llama", "donkey");
static final Map<String, String> EQUIP = Map.ofEntries( // armor / carpet
Map.entry("horse", "diamond"), Map.entry("llama", "red"), Map.entry("trader_llama", "trader_llama")
);
public static void main(String[] args) throws Exception {
@@ -67,7 +84,7 @@ public class EntityTestRender {
DefaultScreenRenderer renderer = new DefaultScreenRenderer(registry, tint, textures, baker, beBaker, log);
BlockData air = (BlockData) Proxy.newProxyInstance(EntityTestRender.class.getClassLoader(),
new Class[]{BlockData.class}, (p, m, a) -> {
new Class<?>[]{BlockData.class}, (p, m, a) -> {
switch (m.getName()) {
case "getMaterial": return Material.AIR;
case "equals": return p == a[0];
@@ -126,7 +143,8 @@ public class EntityTestRender {
SkyContext sky, String key, float yaw) {
boolean isPlayer = key.equals("player");
EntityState s = new EntityState(key, 0, 0, 0, yaw, false, 0.8, 1.0,
isPlayer, null, false, VAR.get(key), 0, 1.0);
isPlayer, null, false, VAR.get(key), 0, 1.0, PROF.get(key), LVL.getOrDefault(key, 0),
MARK.get(key), SADDLE.contains(key), CHEST.contains(key), EQUIP.get(key));
RenderedEntity re = baker.bake(s);
double cx = (re.aabbMin[0] + re.aabbMax[0]) / 2;
double cy = (re.aabbMin[1] + re.aabbMax[1]) / 2;