diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/PackGenerator.java b/src/main/java/re/imc/geysermodelenginepackgenerator/PackGenerator.java index a700ac9..f73bb0d 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/PackGenerator.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/PackGenerator.java @@ -271,8 +271,8 @@ public static void startGenerate(File source, File output) { if (geo != null) { entry.getValue().addHeadBind(geo); } - Path path = animationsFolder.toPath().resolve(entry.getValue().getPath() + entry.getKey() + ".animation.json"); - Path pathController = animationControllersFolder.toPath().resolve(entry.getValue().getPath() + entry.getKey() + ".animation_controllers.json"); + Path path = animationsFolder.toPath().resolve(entry.getKey() + ".json"); + Path pathController = animationControllersFolder.toPath().resolve(entry.getKey() + ".json"); pathController.toFile().getParentFile().mkdirs(); path.toFile().getParentFile().mkdirs(); @@ -294,7 +294,7 @@ public static void startGenerate(File source, File output) { for (Map.Entry entry : geometryMap.entrySet()) { entry.getValue().modify(); - Path path = modelsFolder.toPath().resolve(entry.getValue().getPath() + entry.getKey() + ".geo.json"); + Path path = modelsFolder.toPath().resolve(entry.getKey() + ".json"); path.toFile().getParentFile().mkdirs(); String id = entry.getValue().getGeometryId(); @@ -309,7 +309,7 @@ public static void startGenerate(File source, File output) { String suffix = size[0] + "_" + size[1]; entry.getValue().setTextureWidth(size[0]); entry.getValue().setTextureHeight(size[1]); - path = modelsFolder.toPath().resolve(entry.getValue().getPath() + entry.getKey() + "_" + suffix + ".geo.json"); + path = modelsFolder.toPath().resolve(entry.getKey() + "_" + suffix + ".json"); entry.getValue().setId(id + "_" + suffix); @@ -341,7 +341,7 @@ public static void startGenerate(File source, File output) { for (Map.Entry> textures : textureMap.entrySet()) { for (Map.Entry entry : textures.getValue().entrySet()) { - Path path = texturesFolder.toPath().resolve(entry.getValue().getPath() + textures.getKey() + "/" + entry.getKey() + ".png"); + Path path = texturesFolder.toPath().resolve(entry.getKey() + ".png"); path.toFile().getParentFile().mkdirs(); if (path.toFile().exists()) { @@ -361,7 +361,7 @@ public static void startGenerate(File source, File output) { Entity entity = entry.getValue(); entity.modify(); - Path entityPath = entityFolder.toPath().resolve(entity.getPath() + entry.getKey() + ".entity.json"); + Path entityPath = entityFolder.toPath().resolve(entry.getKey() + ".json"); entityPath.toFile().getParentFile().mkdirs(); if (entityPath.toFile().exists()) { continue; @@ -378,7 +378,7 @@ public static void startGenerate(File source, File output) { if (!geometryMap.containsKey(id)) continue; RenderController controller = new RenderController(id, geometryMap.get(id).getBones(), entity); entity.setRenderController(controller); - Path renderPath = new File(renderControllersFolder, "controller.render." + id + ".json").toPath(); + Path renderPath = new File(renderControllersFolder, "meg_" + id + ".json").toPath(); if (renderPath.toFile().exists()) { continue; } diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java index 44c98a3..c2f5585 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java @@ -72,7 +72,7 @@ public void modify() { json = new JsonParser().parse(TEMPLATE.replace("%entity_id%", modelId) .replace("%geometry%", "geometry.meg_" + modelId) - .replace("%texture%", "textures/entity/" + path + modelId) + .replace("%texture%", "textures/entity/" + modelId) .replace("%look_at_target%", modelConfig.isEnableHeadRotation() ? "animation." + modelId + ".look_at_target" : "animation.none") .replace("%material%", modelConfig.getMaterial())).getAsJsonObject(); @@ -88,8 +88,8 @@ public void modify() { materials.forEach(jsonMaterials::addProperty); if (modelConfig.getPerTextureUvSize().isEmpty()) { - jsonGeometry.addProperty("default", "geometry.meg_" + modelId); - jsonTextures.addProperty("default", "textures/entity/" + path + modelId + "/" + textureMap.keySet().stream().findFirst().orElse("def")); + jsonGeometry.addProperty(modelId, "geometry.meg_" + modelId); + jsonTextures.addProperty("default", "textures/entity/" + modelId); } for (String name : textureMap.keySet()) { @@ -100,11 +100,12 @@ public void modify() { Integer[] size = modelConfig.getPerTextureUvSize().getOrDefault(name, new Integer[]{16, 16}); String suffix = size[0] + "_" + size[1]; - jsonGeometry.addProperty("t_" + suffix, "geometry.meg_" + modelId + "_" + suffix); - jsonTextures.addProperty(name, "textures/entity/" + path + modelId + "/" + name); + jsonGeometry.addProperty(modelId + "_" + suffix, "geometry.meg_" + modelId + "_" + suffix); + jsonTextures.addProperty(name, "textures/entity/" + name); } - jsonRenderControllers.add("controller.render." + modelId + "_" + name); + String controllerName = name.equals(modelId) ? "controller.render.meg_" + modelId : "controller.render.meg_" + modelId + "_" + name; + jsonRenderControllers.add(controllerName); } diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/RenderController.java b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/RenderController.java index d7b5ef3..52843ff 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/RenderController.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/RenderController.java @@ -49,14 +49,15 @@ public String generate() { JsonObject controller = new JsonObject(); - renderControllers.add("controller.render." + modelId + "_" + key, controller); + String controllerName = key.equals(modelId) ? "controller.render.meg_" + modelId : "controller.render.meg_" + modelId + "_" + key; + renderControllers.add(controllerName, controller); if (!entity.getModelConfig().getPerTextureUvSize().isEmpty()) { Integer[] size = entity.getModelConfig().getPerTextureUvSize().getOrDefault(key, new Integer[]{16, 16}); - String suffix = "t_" + size[0] + "_" + size[1]; - controller.addProperty("geometry", "Geometry." + suffix); + String suffix = size[0] + "_" + size[1]; + controller.addProperty("geometry", "Geometry." + modelId + "_" + suffix); } else { - controller.addProperty("geometry", "Geometry.default"); + controller.addProperty("geometry", "Geometry." + modelId); } JsonArray materials = new JsonArray(); String material = entity.getModelConfig().getTextureMaterials().get(key); @@ -71,7 +72,9 @@ public String generate() { controller.add("uv_anim", uvAnim); JsonArray offset = new JsonArray(); offset.add(0.0); - offset.add("math.mod(math.floor(q.life_time * " + anim.fps + ")," + anim.frames + ") / " + anim.frames); + // Cap fps at reasonable value (7.0 is standard for Bedrock animations) + double animFps = anim.fps > 60 ? 7.0 : anim.fps; + offset.add("math.mod(math.floor(q.life_time * " + animFps + ")," + anim.frames + ") / " + anim.frames); uvAnim.add("offset", offset); JsonArray scale = new JsonArray(); scale.add(1.0);