diff --git a/build.gradle.kts b/build.gradle.kts index 86509a4..4f4fafc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ repositories { } dependencies { - compileOnly("org.geysermc.geyser:api:2.8.3-SNAPSHOT") + compileOnly("org.geysermc.geyser:api:2.9.0-SNAPSHOT") compileOnly(files("libs/geyserutils-geyser-1.0-SNAPSHOT.jar")) diff --git a/libs/geyserutils-geyser-1.0-SNAPSHOT.jar b/libs/geyserutils-geyser-1.0-SNAPSHOT.jar index 18f19e9..e4579a4 100644 Binary files a/libs/geyserutils-geyser-1.0-SNAPSHOT.jar and b/libs/geyserutils-geyser-1.0-SNAPSHOT.jar differ diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/GeyserModelEnginePackGenerator.java b/src/main/java/re/imc/geysermodelenginepackgenerator/GeyserModelEnginePackGenerator.java index 14fd5b2..a0be1fb 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/GeyserModelEnginePackGenerator.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/GeyserModelEnginePackGenerator.java @@ -11,12 +11,15 @@ import org.geysermc.geyser.api.pack.PackCodec; import org.geysermc.geyser.api.pack.ResourcePack; import re.imc.geysermodelenginepackgenerator.managers.ConfigManager; import re.imc.geysermodelenginepackgenerator.managers.resourcepack.ResourcePackManager; +import re.imc.geysermodelenginepackgenerator.managers.resourcepack.templates.TemplatesManager; public class GeyserModelEnginePackGenerator implements Extension { private static GeyserModelEnginePackGenerator extension; private ConfigManager configManager; + + private TemplatesManager templatesManager; private ResourcePackManager resourcePackManager; @Subscribe @@ -35,17 +38,17 @@ public class GeyserModelEnginePackGenerator implements Extension { .source(CommandSource.class) .playerOnly(false) .description("GeyserModelPackGenerator Reload Command") - .permission("geysermodelenginepackgenerator.admin") + .permission("geysermodelenginepackgenerator.commands.reload") .executor((source, command, args) -> { resourcePackManager.loadPack(); - source.sendMessage("GeyserModelEnginePackGenerator reloaded!"); + source.sendMessage(configManager.getLang().getString("commands.geysermodelenginepackgenerator.reload.successfully-reloaded")); }) .build()); } @Subscribe public void onPackLoad(GeyserDefineResourcePacksEvent event) { - if (!extension.getConfigManager().getConfig().getBoolean("options.resource-pack.auto-load")) return; + if (!configManager.getConfig().getBoolean("options.resource-pack.auto-load")) return; ResourcePack resourcePack = ResourcePack.create(PackCodec.path(resourcePackManager.getGeneratedPackZipPath())); event.register(resourcePack); @@ -53,6 +56,7 @@ public class GeyserModelEnginePackGenerator implements Extension { private void loadManagers() { this.configManager = new ConfigManager(); + this.templatesManager = new TemplatesManager(this); this.resourcePackManager = new ResourcePackManager(this); } @@ -64,6 +68,10 @@ public class GeyserModelEnginePackGenerator implements Extension { return configManager; } + public TemplatesManager getTemplatesManager() { + return templatesManager; + } + public ResourcePackManager getResourcePackManager() { return resourcePackManager; } diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Material.java b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Material.java deleted file mode 100644 index 5043885..0000000 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Material.java +++ /dev/null @@ -1,39 +0,0 @@ -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" - ] - }, - "entity_change_color_one_sided:entity": { - "+defines": [ - "USE_OVERLAY", - "USE_COLOR_MASK" - ] - }, - "entity_alphatest_change_color_one_sided:entity_change_color_one_sided": { - "+defines": [ "ALPHA_TEST" ], - "+samplerStates": [ - { - "samplerIndex": 1, - "textureWrap": "Repeat" - } - ], - "msaaSupport": "Both" - }, - - "entity_alphatest_anim_change_color_one_sided:entity_alphatest_change_color_one_sided":{ - "+defines":[ - "USE_UV_ANIM" - ] - } - } - } - """; - -} diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/PackManifest.java b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/PackManifest.java deleted file mode 100644 index bdad701..0000000 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/PackManifest.java +++ /dev/null @@ -1,32 +0,0 @@ -package re.imc.geysermodelenginepackgenerator.generator; - -import java.util.UUID; - -public class PackManifest { - - public static final String TEMPLATE = """ - { - "format_version": 2, - "header": { - "name": "GeyserModelEngine", - "description": "GeyserModelEngine For Geyser", - "uuid": "%uuid-1%", - "version": [0, 0, 1], - "min_engine_version": [1, 21, 100] - }, - "modules": [ - { - "type": "resources", - "description": "GeyserModelEngine", - "uuid": "%uuid-2%", - "version": [0, 0, 1] - } - ] - } - """; - - public static String generate() { - return TEMPLATE.replace("%uuid-1%", UUID.randomUUID().toString()) - .replace("%uuid-2%", UUID.randomUUID().toString()); - } -} diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/managers/ConfigManager.java b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/ConfigManager.java index 7018235..f494f48 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/managers/ConfigManager.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/ConfigManager.java @@ -4,7 +4,7 @@ import re.imc.geysermodelenginepackgenerator.util.FileConfiguration; public class ConfigManager { - private FileConfiguration config; + private FileConfiguration config, lang; public ConfigManager() { load(); @@ -12,9 +12,14 @@ public class ConfigManager { public void load() { this.config = new FileConfiguration("config.yml"); + this.lang = new FileConfiguration("Lang/messages.yml"); } public FileConfiguration getConfig() { return config; } + + public FileConfiguration getLang() { + return lang; + } } diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/ResourcePackManager.java b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/ResourcePackManager.java index 7f87db4..b69a528 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/ResourcePackManager.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/ResourcePackManager.java @@ -4,7 +4,8 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonParser; import re.imc.geysermodelenginepackgenerator.GeyserModelEnginePackGenerator; -import re.imc.geysermodelenginepackgenerator.generator.*; +import re.imc.geysermodelenginepackgenerator.managers.resourcepack.generator.*; +import re.imc.geysermodelenginepackgenerator.managers.resourcepack.generator.data.TextureData; import re.imc.geysermodelenginepackgenerator.util.ZipUtil; import java.io.*; @@ -28,7 +29,7 @@ public class ResourcePackManager { private final HashMap entityCache = new HashMap<>(); private final HashMap animationCache = new HashMap<>(); private final HashMap geometryCache = new HashMap<>(); - private final HashMap> textureCache = new HashMap<>(); + private final HashMap> textureCache = new HashMap<>(); private final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); @@ -73,7 +74,9 @@ public class ResourcePackManager { output.mkdirs(); if (!manifestFile.exists()) { try { - Files.writeString(manifestFile.toPath(), PackManifest.generate(), StandardCharsets.UTF_8); + + // PackManifest.generate() + Files.writeString(manifestFile.toPath(), extension.getTemplatesManager().getTemplatesCache().get("packmanifest").toString(), StandardCharsets.UTF_8); } catch (IOException err) { throw new RuntimeException(err); } @@ -91,7 +94,7 @@ public class ResourcePackManager { if (!materialFile.exists()) { try { - Files.writeString(materialFile.toPath(), Material.TEMPLATE, StandardCharsets.UTF_8); + Files.writeString(materialFile.toPath(), extension.getTemplatesManager().getTemplatesCache().get("material").toString(), StandardCharsets.UTF_8); } catch (IOException err) { throw new RuntimeException(err); } @@ -132,7 +135,7 @@ public class ResourcePackManager { if (entity != null) { ModelConfig modelConfig = entity.getModelConfig(); if (!modelConfig.getPerTextureUvSize().isEmpty()) { - for (Map.Entry textureEntry : entity.getTextureMap().entrySet()) { + for (Map.Entry textureEntry : entity.getTextureMap().entrySet()) { String name = textureEntry.getKey(); Integer[] size = modelConfig.getPerTextureUvSize().getOrDefault(name, new Integer[]{16, 16}); @@ -163,8 +166,8 @@ public class ResourcePackManager { } } - for (Map.Entry> textures : textureCache.entrySet()) { - for (Map.Entry entry : textures.getValue().entrySet()) { + for (Map.Entry> textures : textureCache.entrySet()) { + for (Map.Entry entry : textures.getValue().entrySet()) { Path path = texturesFolder.toPath().resolve(entry.getValue().getPath() + textures.getKey() + "/" + entry.getKey() + ".png"); path.toFile().getParentFile().mkdirs(); @@ -248,9 +251,9 @@ public class ResourcePackManager { bindingBones.add("*"); if (modelConfig.getBingingBones().containsKey(textureName)) bindingBones = modelConfig.getBingingBones().get(textureName); - Map map = textureCache.computeIfAbsent(modelId, s -> new HashMap<>()); + Map map = textureCache.computeIfAbsent(modelId, s -> new HashMap<>()); try { - map.put(textureName, new Texture(modelId, currentPath, bindingBones, Files.readAllBytes(file.toPath()))); + map.put(textureName, new TextureData(modelId, currentPath, bindingBones, Files.readAllBytes(file.toPath()))); } catch (IOException err) { throw new RuntimeException(err); } @@ -356,9 +359,9 @@ public class ResourcePackManager { bindingBones = modelConfig.getBingingBones().get(textureName); } - Map map = textureCache.computeIfAbsent(modelId, s -> new HashMap<>()); + Map map = textureCache.computeIfAbsent(modelId, s -> new HashMap<>()); try { - map.put(textureName, new Texture(modelId, currentPath, bindingBones, zip.getInputStream(e).readAllBytes())); + map.put(textureName, new TextureData(modelId, currentPath, bindingBones, zip.getInputStream(e).readAllBytes())); } catch (IOException err) { throw new RuntimeException(err); } @@ -439,7 +442,7 @@ public class ResourcePackManager { return geometryCache; } - public HashMap> getTextureCache() { + public HashMap> getTextureCache() { return textureCache; } } diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Animation.java b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/Animation.java similarity index 98% rename from src/main/java/re/imc/geysermodelenginepackgenerator/generator/Animation.java rename to src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/Animation.java index 57548b2..dac86ae 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Animation.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/Animation.java @@ -1,4 +1,4 @@ -package re.imc.geysermodelenginepackgenerator.generator; +package re.imc.geysermodelenginepackgenerator.managers.resourcepack.generator; import com.google.gson.JsonArray; import com.google.gson.JsonElement; diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/AnimationController.java b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/AnimationController.java similarity index 97% rename from src/main/java/re/imc/geysermodelenginepackgenerator/generator/AnimationController.java rename to src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/AnimationController.java index 2421755..da63a5a 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/AnimationController.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/AnimationController.java @@ -1,10 +1,8 @@ -package re.imc.geysermodelenginepackgenerator.generator; +package re.imc.geysermodelenginepackgenerator.managers.resourcepack.generator; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import lombok.Getter; -import lombok.Setter; import re.imc.geysermodelenginepackgenerator.GeyserModelEnginePackGenerator; import java.util.ArrayList; @@ -53,7 +51,6 @@ public class AnimationController { id = id.replace(" ", "_"); int n = (int) Math.pow(2, (i % 24)); - //TODO namespace JsonObject controller = JsonParser.parseString(CONTROLLER_TEMPLATE.replace("%anim%", id).replace("%query%", "math.mod(math.floor(query.property('" + extension.getConfigManager().getConfig().getString("models.namespace") + ":anim" + i / 24 + "') / " + n + "), 2)")).getAsJsonObject(); animationControllers.add("controller.animation." + animation.getModelId() + "." + id, controller); i++; diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/Entity.java similarity index 93% rename from src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java rename to src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/Entity.java index d2b1a86..56ee02a 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/Entity.java @@ -1,13 +1,11 @@ -package re.imc.geysermodelenginepackgenerator.generator; +package re.imc.geysermodelenginepackgenerator.managers.resourcepack.generator; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; import me.zimzaza4.geyserutils.geyser.GeyserUtils; +import re.imc.geysermodelenginepackgenerator.GeyserModelEnginePackGenerator; +import re.imc.geysermodelenginepackgenerator.managers.resourcepack.generator.data.TextureData; import java.util.*; @@ -22,7 +20,7 @@ public class Entity { private Geometry geometry; private RenderController renderController; private String path; - private Map textureMap = new HashMap<>(); + private Map textureMap = new HashMap<>(); private ModelConfig modelConfig; public static final String TEMPLATE = """ @@ -164,7 +162,7 @@ public class Entity { this.path = path; } - public void setTextureMap(Map textureMap) { + public void setTextureMap(Map textureMap) { this.textureMap = textureMap; } @@ -200,7 +198,7 @@ public class Entity { return path; } - public Map getTextureMap() { + public Map getTextureMap() { return textureMap; } diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Geometry.java b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/Geometry.java similarity index 82% rename from src/main/java/re/imc/geysermodelenginepackgenerator/generator/Geometry.java rename to src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/Geometry.java index 7ae899e..9f39330 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Geometry.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/Geometry.java @@ -1,10 +1,7 @@ -package re.imc.geysermodelenginepackgenerator.generator; +package re.imc.geysermodelenginepackgenerator.managers.resourcepack.generator; import com.google.gson.*; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import re.imc.geysermodelenginepackgenerator.managers.resourcepack.generator.data.BoneData; import java.util.*; @@ -13,7 +10,7 @@ public class Geometry { private String modelId; private String geometryId; private JsonObject json; - private final Map bones = new HashMap<>(); + private final Map bones = new HashMap<>(); private String path; @@ -53,13 +50,13 @@ public class Geometry { if (name.equals("hitbox") || name.equals("shadow") || name.equals("mount") || name.startsWith("b_") || name.startsWith("ob_")) { iterator.remove(); } else { - bones.put(name, new Bone(name, parent, new HashSet<>(), new HashSet<>())); + bones.put(name, new BoneData(name, parent, new HashSet<>(), new HashSet<>())); } } - for (Bone bone : bones.values()) { + for (BoneData bone : bones.values()) { if (bone.getParent() != null) { - Bone parent = bones.get(bone.getParent()); + BoneData parent = bones.get(bone.getParent()); if (parent != null) { parent.getChildren().add(bone); addAllChildren(parent, bone); @@ -70,9 +67,9 @@ public class Geometry { setId("geometry.meg_" + modelId); } - public void addAllChildren(Bone p, Bone c) { + public void addAllChildren(BoneData p, BoneData c) { p.getAllChildren().add(c); - Bone parent = bones.get(p.getParent()); + BoneData parent = bones.get(p.getParent()); if (parent != null) { addAllChildren(parent, c); } @@ -110,7 +107,7 @@ public class Geometry { return path; } - public Map getBones() { + public Map getBones() { return bones; } } diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/ModelConfig.java b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/ModelConfig.java similarity index 97% rename from src/main/java/re/imc/geysermodelenginepackgenerator/generator/ModelConfig.java rename to src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/ModelConfig.java index bfdee89..f95ecb0 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/ModelConfig.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/ModelConfig.java @@ -1,4 +1,4 @@ -package re.imc.geysermodelenginepackgenerator.generator; +package re.imc.geysermodelenginepackgenerator.managers.resourcepack.generator; import com.google.gson.annotations.SerializedName; import lombok.*; diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/RenderController.java b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/RenderController.java similarity index 93% rename from src/main/java/re/imc/geysermodelenginepackgenerator/generator/RenderController.java rename to src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/RenderController.java index d263614..03c2607 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/RenderController.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/RenderController.java @@ -1,7 +1,8 @@ -package re.imc.geysermodelenginepackgenerator.generator; +package re.imc.geysermodelenginepackgenerator.managers.resourcepack.generator; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import re.imc.geysermodelenginepackgenerator.managers.resourcepack.generator.data.BoneData; import java.util.*; @@ -10,10 +11,10 @@ public class RenderController { public static final Set NEED_REMOVE_WHEN_SORT = Set.of("pbody_", "plarm_", "prarm_", "plleg_", "prleg_", "phead_", "p_"); private final String modelId; - private final Map bones; + private final Map bones; private final Entity entity; - public RenderController(String modelId, Map bones, Entity entity) { + public RenderController(String modelId, Map bones, Entity entity) { this.modelId = modelId; this.bones = bones; this.entity = entity; @@ -29,7 +30,7 @@ public class RenderController { JsonObject renderControllers = new JsonObject(); root.add("render_controllers", renderControllers); - Set processedBones = new HashSet<>(); + Set processedBones = new HashSet<>(); boolean singleTexture = entity.getTextureMap().size() == 1 && entity.getModelConfig().getPerTextureUvSize().isEmpty(); for (String key : entity.getTextureMap().keySet()) { if (key.endsWith("_e")) continue; @@ -126,10 +127,10 @@ public class RenderController { for (String boneName : sorted) { boneName = originalId.get(boneName); JsonObject visibilityItem = new JsonObject(); - Bone bone = bones.get(boneName); + BoneData bone = bones.get(boneName); boolean uvParent = false; - for (Bone child : bone.getAllChildren()) { + for (BoneData child : bone.getAllChildren()) { if (child.getName().startsWith("uv_")) { if (uvAllBones.contains(child.getName())) { uvParent = true; diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Bone.java b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/data/BoneData.java similarity index 51% rename from src/main/java/re/imc/geysermodelenginepackgenerator/generator/Bone.java rename to src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/data/BoneData.java index 73942b2..360f175 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Bone.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/data/BoneData.java @@ -1,15 +1,15 @@ -package re.imc.geysermodelenginepackgenerator.generator; +package re.imc.geysermodelenginepackgenerator.managers.resourcepack.generator.data; import java.util.Set; -public class Bone { +public class BoneData { private final String name; private final String parent; - private final Set children; - private final Set allChildren; + private final Set children; + private final Set allChildren; - public Bone(String name, String parent, Set children, Set allChildren) { + public BoneData(String name, String parent, Set children, Set allChildren) { this.name = name; this.parent = parent; this.children = children; @@ -24,11 +24,11 @@ public class Bone { return parent; } - public Set getChildren() { + public Set getChildren() { return children; } - public Set getAllChildren() { + public Set getAllChildren() { return allChildren; } } diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Texture.java b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/data/TextureData.java similarity index 73% rename from src/main/java/re/imc/geysermodelenginepackgenerator/generator/Texture.java rename to src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/data/TextureData.java index 35edb5b..0d6c824 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Texture.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/generator/data/TextureData.java @@ -1,15 +1,15 @@ -package re.imc.geysermodelenginepackgenerator.generator; +package re.imc.geysermodelenginepackgenerator.managers.resourcepack.generator.data; import java.util.Set; -public class Texture { +public class TextureData { private final String modelId; private final String path; private final Set bindingBones; private final byte[] image; - public Texture(String modelId, String path, Set bindingBones, byte[] image) { + public TextureData(String modelId, String path, Set bindingBones, byte[] image) { this.modelId = modelId; this.path = path; this.bindingBones = bindingBones; diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/templates/TemplatesManager.java b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/templates/TemplatesManager.java new file mode 100644 index 0000000..f7b069e --- /dev/null +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/managers/resourcepack/templates/TemplatesManager.java @@ -0,0 +1,41 @@ +package re.imc.geysermodelenginepackgenerator.managers.resourcepack.templates; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; +import re.imc.geysermodelenginepackgenerator.GeyserModelEnginePackGenerator; +import re.imc.geysermodelenginepackgenerator.util.FileUtils; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.HashMap; + +public class TemplatesManager { + + private final GeyserModelEnginePackGenerator extension; + + private final HashMap templatesCache = new HashMap<>(); + + public TemplatesManager(GeyserModelEnginePackGenerator extension) { + this.extension = extension; + + loadTemplates(); + } + + private void loadTemplates() { + for (File file : FileUtils.getAllFiles(new File(extension.dataFolder().toFile(), "ResourcePack/Templates"), "json")) { + try (FileReader reader = new FileReader(file)) { + JsonObject templateObject = JsonParser.parseReader(reader).getAsJsonObject(); + String templateName = file.getName().replace(".json", ""); + templatesCache.put(templateName.toLowerCase(), templateObject); + } catch (IOException | JsonSyntaxException err) { + throw new RuntimeException(err); + } + } + } + + public HashMap getTemplatesCache() { + return templatesCache; + } +} diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/util/BooleanPacker.java b/src/main/java/re/imc/geysermodelenginepackgenerator/util/BooleanPacker.java index 221a120..19f4519 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/util/BooleanPacker.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/util/BooleanPacker.java @@ -4,17 +4,18 @@ import java.util.*; import java.util.concurrent.ThreadLocalRandom; public class BooleanPacker { + public static final int MAX_BOOLEANS = 24; public static int booleansToInt(List booleans) { int result = 0; int i = 1; + for (boolean b : booleans) { - if (b) { - result += i; - } + if (b) result += i; i *= 2; } + return result; } @@ -23,12 +24,12 @@ public class BooleanPacker { int i = 1; List keys = new ArrayList<>(booleanMap.keySet()); Collections.sort(keys); + for (String key : keys) { - if (booleanMap.get(key)) { - result += i; - } + if (booleanMap.get(key)) result += i; i *= 2; } + return result; } @@ -58,12 +59,11 @@ public class BooleanPacker { List keys = new ArrayList<>(booleanMap.keySet()); List booleans = new ArrayList<>(); Collections.sort(keys); + for (String key : keys) { booleans.add(booleanMap.get(key)); } + return booleansToInts(booleans); } - - - } diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/util/FileUtils.java b/src/main/java/re/imc/geysermodelenginepackgenerator/util/FileUtils.java new file mode 100644 index 0000000..2080e8c --- /dev/null +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/util/FileUtils.java @@ -0,0 +1,23 @@ +package re.imc.geysermodelenginepackgenerator.util; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class FileUtils { + + public static List getAllFiles(File folder, String fileType) { + List files = new ArrayList<>(); + if (folder == null || !folder.exists()) return files; + + for (File file : folder.listFiles()) { + if (file.isDirectory()) { + files.addAll(getAllFiles(file, fileType)); + } else if (file.getName().endsWith(fileType)) { + files.add(file); + } + } + + return files; + } +} diff --git a/src/main/resources/Extension/Lang/messages.yml b/src/main/resources/Extension/Lang/messages.yml new file mode 100644 index 0000000..e5ff741 --- /dev/null +++ b/src/main/resources/Extension/Lang/messages.yml @@ -0,0 +1,4 @@ +commands: + geysermodelenginepackgenerator: + reload: + successfully-reloaded: "GeyserModelEnginePackGenerator reloaded!" \ No newline at end of file diff --git a/src/main/resources/Extension/ResoucePack/Templates/Material.json b/src/main/resources/Extension/ResoucePack/Templates/Material.json new file mode 100644 index 0000000..9b45e44 --- /dev/null +++ b/src/main/resources/Extension/ResoucePack/Templates/Material.json @@ -0,0 +1,32 @@ +{ + "materials":{ + "version":"1.0.0", + "entity_alphatest_anim_change_color:entity_alphatest_change_color":{ + "+defines":[ + "USE_UV_ANIM" + ] + }, + "entity_change_color_one_sided:entity": { + "+defines": [ + "USE_OVERLAY", + "USE_COLOR_MASK" + ] + }, + "entity_alphatest_change_color_one_sided:entity_change_color_one_sided": { + "+defines": [ "ALPHA_TEST" ], + "+samplerStates": [ + { + "samplerIndex": 1, + "textureWrap": "Repeat" + } + ], + "msaaSupport": "Both" + }, + + "entity_alphatest_anim_change_color_one_sided:entity_alphatest_change_color_one_sided":{ + "+defines":[ + "USE_UV_ANIM" + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/Extension/ResoucePack/Templates/PackManifest.json b/src/main/resources/Extension/ResoucePack/Templates/PackManifest.json new file mode 100644 index 0000000..3ffd55f --- /dev/null +++ b/src/main/resources/Extension/ResoucePack/Templates/PackManifest.json @@ -0,0 +1,18 @@ +{ + "format_version": 2, + "header": { + "name": "GeyserModelEngine", + "description": "GeyserModelEngine For Geyser", + "uuid": "782e97f0-5caf-473e-a47c-d7929859626b", + "version": [0, 0, 1], + "min_engine_version": [1, 21, 100] + }, + "modules": [ + { + "type": "resources", + "description": "GeyserModelEngine", + "uuid": "782e97f0-5caf-473e-a47c-d7929859626b", + "version": [0, 0, 1] + } + ] +} \ No newline at end of file