render emissive eye/glow layers, per-model vanilla render types (cutout vs translucent, unshaded), sheep undercoat and vanilla wool colour, angry wolves, tipped arrow and invulnerable wither textures, small armor stand armor textures, elytra rest pose, vanilla mob arm poses (piglins, illagers), layer test scenes

This commit is contained in:
MineTec committed 2026-11-04 18:59:14 +01:00
1 parent 45d033bd89
commit 2c2e9e2e32
12 files changed
+896 -99

No files matched your search

+22 -1
View File
@@ -82,6 +82,18 @@ public class EntityTestRender {
"baby:drowned", "baby:zombie_villager", "villager", "pillager", "vindicator", "witch", "cow", "pig",
"creeper", "enderman", "evoker", "illusioner", "wandering_trader", "copper_golem", "fox", "panda"})
VARIANT_CASES.add(t + "+armor");
// Layer / texture states: emissive eyes, sheep undercoat, angry wolves, tipped arrows, invulnerable
// wither, partial-alpha cutout textures, held items (piglin arm poses), elytra.
for (String c : new String[] {"spider", "cave_spider", "enderman", "phantom", "breeze", "warden",
"copper_golem@oxidized", "creaking", "creaking+p:eyes_glowing", "sheep@sheared", "sheep+red",
"sheep@sheared+red", "baby:sheep+red", "sheep+p:jeb", "wolf@pale+p:angry", "baby:wolf@pale+p:angry",
"wolf@pale+tame+p:angry", "arrow+p:tipped", "spectral_arrow", "wither+p:invulnerable",
"llama@gray", "llama@white", "tropical_fish@brinely", "piglin+sword", "piglin+crossbow",
"piglin+sword+crossbowl", "piglin+crossbow+p:arms_crossbow_hold", "piglin+sword+p:arms_attacking_with_melee_weapon",
"zombified_piglin+sword", "piglin_brute+sword", "pillager+crossbow",
"vindicator+sword", "armor_stand+elytra", "zombie+elytra", "baby:armor_stand+armor",
"baby:armor_stand+arms+elytra"})
VARIANT_CASES.add(c);
VARIANT_CASES.addAll(List.of(ENTITIES));
}
@@ -258,12 +270,14 @@ public class EntityTestRender {
if (variant == null) variant = VAR.get(key);
boolean isPlayer = key.equals("player");
int tint = key.equals("tropical_fish") ? 0xFFF9801D : (key.equals("sheep") ? 0xFFF9FFFE : 0);
if (key.equals("sheep") && flags.contains("red")) tint = 0xFFB02E26;
int tint2 = key.equals("tropical_fish") ? 0xFF3AB3DA : 0;
EntityState.Equipment armor = plain ? (baby ? null : ARMOR.get(key)) : null;
if (flags.contains("armor")) {
EntityState.EquipPiece d = P("diamond");
armor = new EntityState.Equipment(d, d, d, d);
}
if (flags.contains("elytra")) armor = new EntityState.Equipment(null, P("elytra"), null, null);
boolean chest = plain ? CHEST.contains(key) : flags.contains("chest");
boolean saddle = plain ? SADDLE.contains(key) : flags.contains("saddle");
String equip = plain ? EQUIP.get(key) : null;
@@ -277,6 +291,9 @@ public class EntityTestRender {
if (f.startsWith("p:")) poses.add(f.substring(2));
if (f.startsWith("pitch:")) pitch = Float.parseFloat(f.substring(6));
}
// Flags the snapshot derives from the entity: sheep undercoat (non-white wool), pillager crossbow hold.
if (key.equals("sheep") && flags.contains("red")) poses.add("undercoat");
if (key.equals("pillager") && flags.contains("crossbow")) poses.add("arms_crossbow_hold");
Collections.sort(poses);
Map<String, float[]> partPoses = null;
if (flags.contains("stand")) {
@@ -290,10 +307,14 @@ public class EntityTestRender {
}
boolean shoulder = flags.contains("shoulder");
ItemSpec mouth = flags.contains("mouth") ? new ItemSpec("sweet_berries", null, null, false) : null;
// Held items: "sword" (right hand), "crossbow" (right hand), "crossbowl" (left hand).
ItemSpec right = flags.contains("sword") ? new ItemSpec("iron_sword", null, null, false)
: flags.contains("crossbow") ? new ItemSpec("crossbow", null, null, false) : null;
ItemSpec left = flags.contains("crossbowl") ? new ItemSpec("crossbow", null, null, false) : null;
return new EntityState(key, 0, 0, 0, yaw, baby, 0.8, 1.0,
isPlayer, null, false, variant, tint, 1.0, PROF.get(key), LVL.getOrDefault(key, 0),
plain ? MARK.get(key) : null, saddle, chest, arms, equip, armor,
plain && !baby && INVISIBLE.contains(key), pitch, 0, tint2, flags.contains("passenger"), null, null, null,
plain && !baby && INVISIBLE.contains(key), pitch, 0, tint2, flags.contains("passenger"), right, left, null,
collar, false, mouth, poses.isEmpty() ? null : String.join("+", poses), partPoses,
shoulder ? "red_blue" : null, shoulder ? "blue" : null);
}