diff --git a/pom.xml b/pom.xml
index dcd0771..b5a01fe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,6 +35,10 @@
true
+
+ jitpack.io
+ https://jitpack.io
+
@@ -62,5 +66,20 @@
system
${project.basedir}/libs/geyserutils-geyser-1.0-SNAPSHOT.jar
+
+ me.rochblondiaux
+ blockbenchmodelreader
+ 1.2
+
+
+ com.github.GeyserMC.PackConverter
+ bedrock-pack-schema
+ 3d8150474d
+
+
+ com.github.GeyserMC.PackConverter
+ pack-schema-api
+ 3d8150474d
+
\ No newline at end of file
diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/GeneratorMain.java b/src/main/java/re/imc/geysermodelenginepackgenerator/GeneratorMain.java
index 881a388..8b3518c 100644
--- a/src/main/java/re/imc/geysermodelenginepackgenerator/GeneratorMain.java
+++ b/src/main/java/re/imc/geysermodelenginepackgenerator/GeneratorMain.java
@@ -14,13 +14,15 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
+import java.util.Set;
public class GeneratorMain {
public static final Map entityMap = new HashMap<>();
- public static final Map animationMap = new HashMap<>();
- public static final Map geometryMap = new HashMap<>();
- public static final Map textureMap = new HashMap<>();
+ public static final Map animationMap = new HashMap<>();
+ public static final Map geometryMap = new HashMap<>();
+ public static final Map> textureMap = new HashMap<>();
public static final Gson GSON = new GsonBuilder().setPrettyPrinting()
.create();
@@ -40,13 +42,23 @@ public class GeneratorMain {
String modelId = folder.getName().toLowerCase();
Entity entity = new Entity(modelId);
+ TextureConfig textureConfig = new TextureConfig();
boolean canAdd = false;
for (File e : folder.listFiles()) {
if (e.isDirectory()) {
generateFromFolder(currentPath + folder.getName() + "/", e);
}
if (e.getName().endsWith(".png")) {
- textureMap.put(modelId, new Texture(modelId, currentPath, e.toPath()));
+ String textureName = e.getName().replace(".png", "");
+ Set bindingBones = new HashSet<>();
+ bindingBones.add("*");
+ if (!textureConfig.getBingingBones().containsKey(textureName)) {
+ bindingBones = textureConfig.getBingingBones().get(textureName);
+ }
+ textureMap.computeIfAbsent(modelId, s -> new HashMap<>()).put(textureName, new Texture(modelId, currentPath, bindingBones, e.toPath()));
+ if (!textureConfig.getBingingBones().isEmpty()) {
+ textureConfig.getBingingBones().put(textureName, Set.of("*"));
+ }
}
if (e.getName().endsWith(".json")) {
try {
@@ -136,6 +148,15 @@ public class GeneratorMain {
materialsFolder.mkdirs();
File materialFile = new File(materialsFolder, "entity.material");
+
+ if (!materialFile.exists()) {
+ try {
+ Files.writeString(materialFile.toPath(),
+ Material.TEMPLATE, StandardCharsets.UTF_8);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
for (Map.Entry entry : animationMap.entrySet()) {
Entity entity = entityMap.get(entry.getKey());
@@ -179,7 +200,7 @@ public class GeneratorMain {
}
}
- for (Map.Entry entry : textureMap.entrySet()) {
+ for (Map.Entry> entry : textureMap.entrySet()) {
Path path = texturesFolder.toPath().resolve(entry.getValue().getPath() + entry.getKey() + ".png");
path.toFile().getParentFile().mkdirs();
@@ -213,7 +234,7 @@ public class GeneratorMain {
String id = entity.getModelId();
if (!geometryMap.containsKey(id)) continue;
- RenderController controller = new RenderController(id, geometryMap.get(id).getBones());
+ RenderController controller = new RenderController(id, geometryMap.get(id).getBones(), entity);
entity.setRenderController(controller);
Path renderPath = new File(renderControllersFolder, "controller.render." + id + ".json").toPath();
if (renderPath.toFile().exists()) {
diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java
index d195564..0ed2c85 100644
--- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java
+++ b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java
@@ -11,6 +11,7 @@ import me.zimzaza4.geyserutils.geyser.GeyserUtils;
import re.imc.geysermodelenginepackgenerator.GeneratorMain;
import java.util.HashSet;
+import java.util.Map;
import java.util.Properties;
import java.util.Set;
@@ -26,13 +27,12 @@ public class Entity {
"description": {
"identifier": "modelengine:%entity_id%",
"materials": {
- "default": "%material%"
+ "default": "%material%",
+ "anim": "entity_alphatest_anim_change_color"
},
"textures": {
- "default": "%texture%"
},
"geometry": {
- "default": "%geometry%"
},
"animations": {
"look_at_target": "%look_at_target%"
@@ -54,19 +54,13 @@ public class Entity {
String modelId;
JsonObject json;
boolean hasHeadAnimation = false;
- @Setter
- @Getter
Animation animation;
-
- @Setter
- @Getter
Geometry geometry;
-
- @Setter
- @Getter
RenderController renderController;
-
String path;
+ Map textureMap;
+ TextureConfig textureConfig;
+
Properties config = new Properties();
@@ -87,6 +81,14 @@ public class Entity {
JsonObject description = json.get("minecraft:client_entity").getAsJsonObject().get("description").getAsJsonObject();
JsonObject jsonAnimations = description.get("animations").getAsJsonObject();
+ JsonObject jsonTextures = description.get("textures").getAsJsonObject();
+ JsonObject jsonGeometry = description.get("geometry").getAsJsonObject();
+
+ for (String name : textureMap.keySet()) {
+ jsonTextures.addProperty(name,"textures/entity/" + path + modelId + "/" + name);
+ jsonGeometry.addProperty(name, "geometry.modelengine_" + modelId);
+ }
+
JsonArray animate = description.get("scripts").getAsJsonObject().get("animate").getAsJsonArray();
if (animation != null) {
diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Material.java b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Material.java
new file mode 100644
index 0000000..2150879
--- /dev/null
+++ b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Material.java
@@ -0,0 +1,17 @@
+package re.imc.geysermodelenginepackgenerator.generator;
+
+public class Material {
+ public static final String TEMPLATE = """
+ {
+ "materials":{
+ "version":"1.0.0",
+ "entity_alphatest_anim_change_color:entity_alphatest_change_color":{
+ "+defines":[
+ "USE_UV_ANIM"
+ ]
+ }
+ }
+ }
+ """;
+
+}
diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/RenderController.java b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/RenderController.java
index 0f7ecab..275c0ec 100644
--- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/RenderController.java
+++ b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/RenderController.java
@@ -11,10 +11,12 @@ public class RenderController {
public static final Set NEED_REMOVE_WHEN_SORT = Set.of("pbody_", "plarm_", "prarm_", "plleg_", "prleg_", "phead_", "p_");
String modelId;
Set bones;
+ Entity entity;
- public RenderController(String modelId, Set bones) {
+ public RenderController(String modelId, Set bones, Entity entity) {
this.modelId = modelId;
this.bones = bones;
+ this.entity = entity;
}
// look, I'm fine with your other code and stuff, but I ain't using templates for JSON lmao
diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Texture.java b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Texture.java
index c0bd870..2715e5e 100644
--- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Texture.java
+++ b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Texture.java
@@ -5,6 +5,7 @@ import lombok.Getter;
import lombok.Setter;
import java.nio.file.Path;
+import java.util.Set;
@Getter
@Setter
@@ -12,8 +13,7 @@ import java.nio.file.Path;
public class Texture {
String modelId;
-
String path;
+ Set bindingBones;
Path originalPath;
-
}
diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/TextureConfig.java b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/TextureConfig.java
new file mode 100644
index 0000000..39d752f
--- /dev/null
+++ b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/TextureConfig.java
@@ -0,0 +1,33 @@
+package re.imc.geysermodelenginepackgenerator.generator;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Getter
+@Setter
+public class TextureConfig {
+
+ @SerializedName("binding_bones")
+ Map> bingingBones = new HashMap<>();
+ @SerializedName("anim_textures")
+ Map animTextures = new HashMap<>();
+
+ @NoArgsConstructor
+ @AllArgsConstructor
+ @Getter
+ @Setter
+ public static class AnimTextureOptions {
+ boolean animUv;
+ float fps;
+ int frames;
+ }
+}