From 245ac021a22f7f3759717526ad567f51b076cb55 Mon Sep 17 00:00:00 2001 From: zimzaza4 <3625282098@qq.com> Date: Sun, 22 Dec 2024 12:05:47 +0800 Subject: [PATCH] add reload command(geysermodelenginepackgenerator reload) --- .../ExtensionMain.java | 37 +++++++++++++++++-- .../GeneratorMain.java | 6 +++ .../generator/Entity.java | 10 +++++ 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/ExtensionMain.java b/src/main/java/re/imc/geysermodelenginepackgenerator/ExtensionMain.java index ca1a43e..64f38c9 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/ExtensionMain.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/ExtensionMain.java @@ -1,10 +1,16 @@ package re.imc.geysermodelenginepackgenerator; import me.zimzaza4.geyserutils.geyser.GeyserUtils; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.event.subscribe.Subscribe; +import org.geysermc.geyser.api.command.Command; +import org.geysermc.geyser.api.command.CommandExecutor; +import org.geysermc.geyser.api.command.CommandSource; +import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCommandsEvent; import org.geysermc.geyser.api.event.lifecycle.GeyserLoadResourcePacksEvent; import org.geysermc.geyser.api.event.lifecycle.GeyserPreInitializeEvent; import org.geysermc.geyser.api.extension.Extension; +import org.geysermc.geyser.api.extension.ExtensionLogger; import re.imc.geysermodelenginepackgenerator.generator.Entity; import re.imc.geysermodelenginepackgenerator.generator.Geometry; import re.imc.geysermodelenginepackgenerator.util.ZipUtil; @@ -15,18 +21,42 @@ import java.nio.channels.FileChannel; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import java.util.List; import java.util.zip.ZipOutputStream; public class ExtensionMain implements Extension { private File source; + public static ExtensionLogger logger; Path generatedPackZip; @Subscribe public void onLoad(GeyserPreInitializeEvent event) { source = dataFolder().resolve("input").toFile(); source.mkdirs(); + logger = logger(); + loadConfig(); + + } + + @Subscribe + public void onDefineCommand(GeyserDefineCommandsEvent event) { + event.register(Command.builder(this) + .name("reload") + .source(CommandSource.class) + .executableOnConsole(true) + .description("GeyserModelPackGenerator Reload Command") + .suggestedOpOnly(true) + .permission("geysermodelenginepackgenerator.admin") + .executor((source, command, args) -> { + loadConfig(); + source.sendMessage("GeyserModelEnginePackGenerator reloaded!"); + }) + .build()); + } + + public void loadConfig() { File generatedPack = dataFolder().resolve("generated_pack").toFile(); @@ -36,14 +66,13 @@ public class ExtensionMain implements Extension { try (ZipOutputStream zipOutputStream = new ZipOutputStream(Files.newOutputStream(generatedPackZip))) { ZipUtil.compressFolder(generatedPack, null, zipOutputStream); - } catch (IOException e) { e.printStackTrace(); } - for (Entity entity : GeneratorMain.entityMap.values()) { - entity.register(); - } + for (Entity entity : GeneratorMain.entityMap.values()) { + entity.register(); + } } diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/GeneratorMain.java b/src/main/java/re/imc/geysermodelenginepackgenerator/GeneratorMain.java index ba45268..5ce6077 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/GeneratorMain.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/GeneratorMain.java @@ -36,6 +36,9 @@ public class GeneratorMain { public static void generateFromZip(String currentPath, String modelId, ZipFile zip) { Entity entity = new Entity(modelId); + if (entityMap.containsKey(modelId)) { + return; + } ModelConfig modelConfig = new ModelConfig(); ZipEntry textureConfigFile = null; for (Iterator it = zip.entries().asIterator(); it.hasNext(); ) { @@ -141,6 +144,9 @@ public class GeneratorMain { ex.printStackTrace(); } } + if (entityMap.containsKey(modelId)) { + continue; + } if (e.getName().endsWith(".png")) { String textureName = e.getName().replace(".png", ""); Set bindingBones = new HashSet<>(); diff --git a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java index 050b45a..68c6cbf 100644 --- a/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java +++ b/src/main/java/re/imc/geysermodelenginepackgenerator/generator/Entity.java @@ -16,6 +16,9 @@ import java.util.*; @AllArgsConstructor @NoArgsConstructor public class Entity { + + public static final Set REGISTERED_ENTITIES = new HashSet<>(); + public static final String TEMPLATE = """ { "format_version": "1.10.0", @@ -116,7 +119,14 @@ public class Entity { public void register() { + + String id = "modelengine:" + modelId; + boolean registered = REGISTERED_ENTITIES.contains(id); + if (registered) { + return; + } + REGISTERED_ENTITIES.add(id); GeyserUtils.addCustomEntity(id); if (geometry == null) { return;