enhance entity rendering: add support for villager levels, horse armor, llama decor, and saddle/chest states
This commit is contained in:
@@ -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];
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user