render all block entities from the dumped vanilla models with decompiled renderer poses, drop the cem block-entity path
This commit is contained in:
1 parent
c66ebaa942
commit
022b080fce
14 files changed
+659
-567
No files matched your search
@@ -156,6 +156,29 @@ public class VanillaModelDump {
|
||||
failed.add(name + " (layer: " + t + ")");
|
||||
}
|
||||
}
|
||||
// Block-entity models posed by their own setupAnim with the static state the vanilla
|
||||
// BlockEntityRenderer uses ("posed/<layer>"): skulls at animation 0 (dragon jaw, piglin ears), banner
|
||||
// flags at wave phase 0 (item/static pose), the lectern's open book (LecternRenderer.BOOK_STATE).
|
||||
// Rest-pose-only models (chest, bell, shulker box, pot, conduit) use "layer/<layer>" directly.
|
||||
posedBlockEntity(out, failed, set, net.minecraft.client.model.geom.ModelLayers.DRAGON_SKULL,
|
||||
m -> new net.minecraft.client.model.object.skull.DragonHeadModel(m),
|
||||
new net.minecraft.client.model.object.skull.SkullModelBase.State());
|
||||
posedBlockEntity(out, failed, set, net.minecraft.client.model.geom.ModelLayers.PIGLIN_HEAD,
|
||||
m -> new net.minecraft.client.model.object.skull.PiglinHeadModel(m),
|
||||
new net.minecraft.client.model.object.skull.SkullModelBase.State());
|
||||
posedBlockEntity(out, failed, set, net.minecraft.client.model.geom.ModelLayers.STANDING_BANNER_FLAG,
|
||||
m -> new net.minecraft.client.model.object.banner.BannerFlagModel(m), 0.0F);
|
||||
posedBlockEntity(out, failed, set, net.minecraft.client.model.geom.ModelLayers.WALL_BANNER_FLAG,
|
||||
m -> new net.minecraft.client.model.object.banner.BannerFlagModel(m), 0.0F);
|
||||
try {
|
||||
Field bookState = Class.forName("net.minecraft.client.renderer.blockentity.LecternRenderer")
|
||||
.getDeclaredField("BOOK_STATE");
|
||||
bookState.setAccessible(true);
|
||||
posedBlockEntity(out, failed, set, net.minecraft.client.model.geom.ModelLayers.BOOK,
|
||||
m -> new net.minecraft.client.model.object.book.BookModel(m), bookState.get(null));
|
||||
} catch (ReflectiveOperationException e) {
|
||||
failed.add("posed/book (" + e + ")");
|
||||
}
|
||||
JsonObject root = new JsonObject();
|
||||
root.addProperty("version", SharedConstants.getCurrentVersion().name());
|
||||
JsonObject models = new JsonObject();
|
||||
@@ -171,6 +194,26 @@ public class VanillaModelDump {
|
||||
for (String f : failed) System.out.println("FAILED " + f);
|
||||
}
|
||||
|
||||
/** One block-entity model posed with {@code state} (see main), stored as {@code posed/<model>#<layer>}. */
|
||||
static void posedBlockEntity(
|
||||
Map<String, JsonObject> out,
|
||||
List<String> failed,
|
||||
EntityModelSet set,
|
||||
ModelLayerLocation loc,
|
||||
java.util.function.Function<ModelPart, Model<?>> factory,
|
||||
Object state) {
|
||||
String name = "posed/" + loc.model().getPath() + "#" + loc.layer();
|
||||
try {
|
||||
JsonObject jem = dump(factory.apply(set.bakeLayer(loc)), state, name, failed);
|
||||
if (jem == null) return;
|
||||
JsonObject entry = new JsonObject();
|
||||
entry.addProperty("model", new Gson().toJson(jem));
|
||||
out.put(name, entry);
|
||||
} catch (Throwable t) {
|
||||
failed.add(name + " (" + t + ")");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Small, name-based tweaks so the default render state shows the typical idle look: illagers stand
|
||||
* with crossed arms (their peaceful pose) instead of the empty-handed "neutral" pose.
|
||||
|
||||
Reference in new issue
Block a user