From 7a0420ea063cf085772a363f760fbaea656aca50 Mon Sep 17 00:00:00 2001 From: Zornov Date: Thu, 16 Oct 2025 21:12:42 +0300 Subject: [PATCH 1/2] build java fix --- build.gradle.kts | 2 +- gradle/libs.versions.toml | 1 - jitpack.yml | 6 +++--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index ddd4a68..dc64a00 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -21,7 +21,7 @@ publishing { publications.create("maven") { groupId = "net.worldseed.multipart" artifactId = "WorldSeedEntityEngine" - version = "11.3.5" + version = "11.3.6" from(components["java"]) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9d827c3..070f12c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,4 @@ [versions] -java = "25" junit = "6.0.0-M2" minestom = "2025.10.11-1.21.10" commons-io = "2.20.0" diff --git a/jitpack.yml b/jitpack.yml index 485f75c..33caed7 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,5 +1,5 @@ jdk: - - openjdk21 + - openjdk25 before_install: - - sdk install java 21.0.2-open - - sdk use java 21.0.2-open + - sdk install java 25-open + - sdk use java 25-open From f7272f30f9dc0d0a5be71a69772318734fdc3ddf Mon Sep 17 00:00:00 2001 From: Zornov Date: Fri, 17 Oct 2025 20:01:25 +0300 Subject: [PATCH 2/2] Support blockbench 5 format --- .../multipart/generator/GeoGenerator.java | 39 +++++++++++++------ .../multipart/generator/ModelGenerator.java | 2 +- .../bulbasaur/BulbasaurMoveGoal.java | 5 ++- src/test/resources/bbmodel/weapon.bbmodel | 2 +- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/worldseed/resourcepack/multipart/generator/GeoGenerator.java b/src/main/java/net/worldseed/resourcepack/multipart/generator/GeoGenerator.java index 37a71d1..72af557 100644 --- a/src/main/java/net/worldseed/resourcepack/multipart/generator/GeoGenerator.java +++ b/src/main/java/net/worldseed/resourcepack/multipart/generator/GeoGenerator.java @@ -7,21 +7,28 @@ import java.util.*; public class GeoGenerator { - private static List parseRecursive(JsonObject obj, Map cubeMap, Map locators, Map nullObjects, String parent) { + private static List parseRecursive(JsonObject obj, Map cubeMap, Map locators, Map nullObjects, Map groups, String parent) { List res = new ArrayList<>(); float scale = 0.25f; - String name = obj.getString("name"); - JsonArray pivot = obj.getJsonArray("origin"); - pivot = Json.createArrayBuilder() - .add(-pivot.getJsonNumber(0).doubleValue() * scale) - .add(pivot.getJsonNumber(1).doubleValue() * scale) - .add(pivot.getJsonNumber(2).doubleValue() * scale) - .build(); + JsonObject group = groups.get(obj.getString("uuid")); + JsonObject data = group != null ? group : obj; + + String name = data.getString("name"); + JsonArray pivot = data.getJsonArray("origin"); + if (pivot == null) { + pivot = Json.createArrayBuilder().add(0).add(0).add(0).build(); + } else { + pivot = Json.createArrayBuilder() + .add(-pivot.getJsonNumber(0).doubleValue() * scale) + .add(pivot.getJsonNumber(1).doubleValue() * scale) + .add(pivot.getJsonNumber(2).doubleValue() * scale) + .build(); + } JsonArrayBuilder cubes = Json.createArrayBuilder(); - JsonArray rotation = obj.getJsonArray("rotation"); + JsonArray rotation = data.getJsonArray("rotation"); if (rotation == null) { rotation = Json.createArrayBuilder().add(0).add(0).add(0).build(); } else { @@ -34,7 +41,7 @@ private static List parseRecursive(JsonObject obj, Map parseRecursive(JsonObject obj, Map textures) { + public static JsonArray generate(JsonArray elements, JsonArray outliner, JsonArray groupsArray, Map textures) { Map blocks = new HashMap<>(); Map locators = new HashMap<>(); Map nullObjects = new HashMap<>(); + Map groups = new HashMap<>(); + + if (groupsArray != null) { + for (JsonValue groupValue : groupsArray) { + JsonObject group = groupValue.asJsonObject(); + groups.put(group.getString("uuid"), group); + } + } for (var element : elements) { JsonObject el = element.asJsonObject(); @@ -111,7 +126,7 @@ public static JsonArray generate(JsonArray elements, JsonArray outliner, Map textures = TextureGenerator.generate(model.getJsonArray("textures"), mcmetas, width, height); - JsonArray bones = GeoGenerator.generate(model.getJsonArray("elements"), model.getJsonArray("outliner"), textures); + JsonArray bones = GeoGenerator.generate(model.getJsonArray("elements"), model.getJsonArray("outliner"), model.getJsonArray("groups"), textures); JsonObject description = Json.createObjectBuilder() .add("identifier", "geometry.unknown") diff --git a/src/test/java/demo_models/bulbasaur/BulbasaurMoveGoal.java b/src/test/java/demo_models/bulbasaur/BulbasaurMoveGoal.java index f99fb3d..3ef8367 100644 --- a/src/test/java/demo_models/bulbasaur/BulbasaurMoveGoal.java +++ b/src/test/java/demo_models/bulbasaur/BulbasaurMoveGoal.java @@ -48,7 +48,8 @@ public void start() { this.lastTargetPos = target.getPosition(); - if (!navigator.getPathPosition().samePoint(lastTargetPos)) { + //noinspection ConstantValue + if (navigator.getPathPosition() == null || !navigator.getPathPosition().samePoint(lastTargetPos)) { navigator.setPathTo(lastTargetPos); } else { forceEnd = true; @@ -87,4 +88,4 @@ public void end() { this.animationHandler.stopRepeat("animation.bulbasaur.ground_walk"); this.forceEnd = false; } -} +} \ No newline at end of file diff --git a/src/test/resources/bbmodel/weapon.bbmodel b/src/test/resources/bbmodel/weapon.bbmodel index 2b9016a..1f42a4c 100644 --- a/src/test/resources/bbmodel/weapon.bbmodel +++ b/src/test/resources/bbmodel/weapon.bbmodel @@ -1 +1 @@ -{"meta":{"format_version":"4.10","model_format":"bedrock","box_uv":true},"name":"weapon","model_identifier":"","visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"bedrock_animation_mode":"entity","timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":32,"height":32},"elements":[{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-1,-4,-3],"to":[5,-3,-1],"autouv":0,"color":9,"rotation":[0,90,0],"origin":[2,-8,0],"uv_offset":[4,4],"faces":{"north":{"uv":[6,6,12,7],"texture":0},"east":{"uv":[4,6,6,7],"texture":0},"south":{"uv":[14,6,20,7],"texture":0},"west":{"uv":[12,6,14,7],"texture":0},"up":{"uv":[12,6,6,4],"texture":0},"down":{"uv":[18,4,12,6],"texture":0}},"type":"cube","uuid":"673cb472-daf4-8d14-b9ed-4db607b1da9a"}],"outliner":[{"name":"bone","origin":[0,-6,0],"bedrock_binding":"","color":0,"uuid":"b5da9add-a741-ba4e-811b-eb250bb0bc7b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["673cb472-daf4-8d14-b9ed-4db607b1da9a"]}],"textures":[{"path":"","name":"texture","folder":"block","namespace":"","id":"0","group":"","width":32,"height":32,"uv_width":32,"uv_height":32,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"auto","pbr_channel":"color","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":false,"uuid":"8b69906f-f5bf-6158-140b-b3c4729b096e","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAALpJREFUWEdjZMABtlx5+B+b1PzeyVh1rJ3fw4jLLHziODWBHGChIoOi98SdJwwgB0iLS6CIP335gmHUAcMzBOiSCJ1f9GJN7RJX0rEm3pmnJmEVZwl/g1WcQ7kPb+5gBDnAQlwMNbW/fMUAcoCCBDeK+IMXXxlADuBWlEMR/3r/EQPIAezS6ijiP5/eZCDKAdicTrcQIKfwoKYeskqvUQeMhsBoCIyGwGgIjIbAaAiMhsBoCIyGwLAKAQAuh2YhJZ2urAAAAABJRU5ErkJggg=="}]} \ No newline at end of file +{"meta":{"format_version":"5.0","model_format":"bedrock","box_uv":true},"name":"weapon","model_identifier":"","visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"bedrock_animation_mode":"entity","timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":32,"height":32},"elements":[{"name":"cube","box_uv":true,"render_order":"default","locked":false,"allow_mirror_modeling":true,"from":[-1,-4,-3],"to":[5,-3,-1],"autouv":0,"color":9,"rotation":[0,90,0],"origin":[2,-8,0],"uv_offset":[4,4],"faces":{"north":{"uv":[6,6,12,7],"texture":0},"east":{"uv":[4,6,6,7],"texture":0},"south":{"uv":[14,6,20,7],"texture":0},"west":{"uv":[12,6,14,7],"texture":0},"up":{"uv":[12,6,6,4],"texture":0},"down":{"uv":[18,4,12,6],"texture":0}},"type":"cube","uuid":"673cb472-daf4-8d14-b9ed-4db607b1da9a"}],"groups":[{"uuid":"b5da9add-a741-ba4e-811b-eb250bb0bc7b","export":true,"locked":false,"origin":[0,-6,0],"rotation":[0,0,0],"bedrock_binding":"","color":0,"name":"bone","children":[],"reset":false,"shade":true,"mirror_uv":false,"selected":false,"visibility":true,"autouv":0,"isOpen":true}],"outliner":[{"uuid":"b5da9add-a741-ba4e-811b-eb250bb0bc7b","isOpen":true,"children":["673cb472-daf4-8d14-b9ed-4db607b1da9a"]}],"textures":[{"name":"texture","path":"","folder":"block","namespace":"","id":"0","group":"","width":32,"height":32,"uv_width":32,"uv_height":32,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"auto","pbr_channel":"color","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":false,"uuid":"8b69906f-f5bf-6158-140b-b3c4729b096e","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAALpJREFUWEdjZMABtlx5+B+b1PzeyVh1rJ3fw4jLLHziODWBHGChIoOi98SdJwwgB0iLS6CIP335gmHUAcMzBOiSCJ1f9GJN7RJX0rEm3pmnJmEVZwl/g1WcQ7kPb+5gBDnAQlwMNbW/fMUAcoCCBDeK+IMXXxlADuBWlEMR/3r/EQPIAezS6ijiP5/eZCDKAdicTrcQIKfwoKYeskqvUQeMhsBoCIyGwGgIjIbAaAiMhsBoCIyGwLAKAQAuh2YhJZ2urAAAAABJRU5ErkJggg=="}]} \ No newline at end of file