diff --git a/config-common/build.gradle b/config-common/build.gradle new file mode 100644 index 00000000..e69de29b diff --git a/config-common/src/main/java/io/github/manasmods/manascore/config/ConfigRegistry.java b/config-common/src/main/java/io/github/manasmods/manascore/config/ConfigRegistry.java new file mode 100644 index 00000000..9b31af16 --- /dev/null +++ b/config-common/src/main/java/io/github/manasmods/manascore/config/ConfigRegistry.java @@ -0,0 +1,74 @@ +package io.github.manasmods.manascore.config; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import io.github.manasmods.manascore.config.api.ManasConfig; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashSet; +import java.util.Set; + +public class ConfigRegistry { + + private static final Gson gson = new GsonBuilder() + .disableHtmlEscaping() + .setPrettyPrinting() + .create(); + + private static final Set registeredConfigs = new HashSet<>(); + private static final Set loadedConfigs = new HashSet<>(); + + public static void registerConfig(ManasConfig config) { + registeredConfigs.add(config); + ManasCoreConfig.LOG.info(config.getClass().getSimpleName() + " registered"); + } + + public static void loadConfigs() { + registeredConfigs.forEach(config -> { + Path startPath = Paths.get("config/" + config.getClass().getSimpleName().toLowerCase() + ".json"); + try { + if (Files.exists(startPath)) { + String string = Files.readString(startPath); + ManasConfig loadedConfig = gson.fromJson(string, config.getClass()); + loadedConfigs.add(loadedConfig); + ManasCoreConfig.LOG.info( config.getClass().getSimpleName() + " loaded"); + } else { + ManasCoreConfig.LOG.info( config.getClass().getSimpleName() + " not found"); + } + } catch (IOException e) { + ManasCoreConfig.LOG.error("Error loading config: " + config.getClass().getSimpleName()); + e.printStackTrace(); + } + }); + } + + public static ManasConfig getConfig(Class clazz) { + return loadedConfigs.stream() + .filter(config -> config.getClass().getSimpleName().equalsIgnoreCase(clazz.getSimpleName().toLowerCase())) + .findFirst() + .orElse(null); + } + + public static void createConfigs() { + registeredConfigs.forEach(config -> { + String content = gson.toJson(config); + Path startPath = Paths.get("config/" + "/" + config.getClass().getSimpleName() + ".json"); + try { + if (!Files.exists(startPath)) { + Files.createDirectories(startPath.getParent()); + Files.write(startPath, content.getBytes()); + ManasCoreConfig.LOG.info("Config: " + config.getClass().getSimpleName() + " created"); + } else { + ManasCoreConfig.LOG.info("Config: " + config.getClass().getSimpleName() + " already exists"); + } + } catch (IOException e) { + ManasCoreConfig.LOG.error("Error creating config: " + config.getClass().getSimpleName()); + e.printStackTrace(); + } + }); + loadConfigs(); + } +} diff --git a/config-common/src/main/java/io/github/manasmods/manascore/config/ManasCoreConfig.java b/config-common/src/main/java/io/github/manasmods/manascore/config/ManasCoreConfig.java new file mode 100644 index 00000000..91392480 --- /dev/null +++ b/config-common/src/main/java/io/github/manasmods/manascore/config/ManasCoreConfig.java @@ -0,0 +1,11 @@ +package io.github.manasmods.manascore.config; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ManasCoreConfig { + + public static final Logger LOG = LoggerFactory.getLogger("ManasCore - Config"); + + +} diff --git a/config-common/src/main/java/io/github/manasmods/manascore/config/api/ManasConfig.java b/config-common/src/main/java/io/github/manasmods/manascore/config/api/ManasConfig.java new file mode 100644 index 00000000..5988372c --- /dev/null +++ b/config-common/src/main/java/io/github/manasmods/manascore/config/api/ManasConfig.java @@ -0,0 +1,7 @@ +package io.github.manasmods.manascore.config.api; + +public abstract class ManasConfig { + + + +} diff --git a/config-common/src/main/resources/architectury.common.json b/config-common/src/main/resources/architectury.common.json new file mode 100644 index 00000000..6a5c2277 --- /dev/null +++ b/config-common/src/main/resources/architectury.common.json @@ -0,0 +1,5 @@ +{ + "injected_interfaces": { + }, + "accessWidener": "manascore_config.accesswidener" +} \ No newline at end of file diff --git a/config-common/src/main/resources/manascore_config.accesswidener b/config-common/src/main/resources/manascore_config.accesswidener new file mode 100644 index 00000000..9ab21739 --- /dev/null +++ b/config-common/src/main/resources/manascore_config.accesswidener @@ -0,0 +1 @@ +accessWidener v2 named diff --git a/config-common/src/main/resources/manascore_config.mixins.json b/config-common/src/main/resources/manascore_config.mixins.json new file mode 100644 index 00000000..cf434be7 --- /dev/null +++ b/config-common/src/main/resources/manascore_config.mixins.json @@ -0,0 +1,19 @@ +{ + "required": true, + "package": "io.github.manasmods.manascore.storage.mixin", + "compatibilityLevel": "JAVA_21", + "minVersion": "0.8", + "client": [ + ], + "mixins": [ + "MixinChunkSerializer", + "MixinDataFixTypes", + "MixinEntity", + "MixinLevel", + "MixinLevelChunk", + "MixinServerLevel" + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/config-fabric/build.gradle b/config-fabric/build.gradle new file mode 100644 index 00000000..e69de29b diff --git a/config-fabric/src/main/java/io/github/manasmods/manascore/config/fabric/ManasCoreConfigFabric.java b/config-fabric/src/main/java/io/github/manasmods/manascore/config/fabric/ManasCoreConfigFabric.java new file mode 100644 index 00000000..9069b919 --- /dev/null +++ b/config-fabric/src/main/java/io/github/manasmods/manascore/config/fabric/ManasCoreConfigFabric.java @@ -0,0 +1,10 @@ +package io.github.manasmods.manascore.config.fabric; + +import net.fabricmc.api.ModInitializer; + +public class ManasCoreConfigFabric implements ModInitializer { + @Override + public void onInitialize() { // No need to initialize something here + + } +} \ No newline at end of file diff --git a/config-fabric/src/main/resources/fabric.mod.json b/config-fabric/src/main/resources/fabric.mod.json new file mode 100644 index 00000000..fd33c5f1 --- /dev/null +++ b/config-fabric/src/main/resources/fabric.mod.json @@ -0,0 +1,34 @@ +{ + "schemaVersion": 1, + "id": "${mod_id}", + "version": "${version}", + "name": "${mod_name}", + "description": "Utility and Core Library for Manas Mods", + "authors": [ + "ManasMods" + ], + "contact": { + "homepage": "" + }, + "license": "${license}", + "icon": "assets/manascore/icon.png", + "environment": "*", + "entrypoints": { + "main": [ + "io.github.manasmods.manascore.config.fabric.ManasCoreConfigFabric" + ], + "client": [] + }, + "mixins": [ + "${mod_id}.mixins.json" + ], + "depends": { + "fabricloader": ">=${fabric_loader_version}", + "minecraft": "~${minecraft_version}", + "java": ">=21", + "architectury": ">=${architectury_version}", + "fabric-api": "*" + }, + "suggests": { + } +} diff --git a/config-fabric/src/main/resources/manascore/icon.png b/config-fabric/src/main/resources/manascore/icon.png new file mode 100644 index 00000000..c9a7b039 Binary files /dev/null and b/config-fabric/src/main/resources/manascore/icon.png differ diff --git a/config-neoforge/build.gradle b/config-neoforge/build.gradle new file mode 100644 index 00000000..e69de29b diff --git a/config-neoforge/gradle.properties b/config-neoforge/gradle.properties new file mode 100644 index 00000000..2914393d --- /dev/null +++ b/config-neoforge/gradle.properties @@ -0,0 +1 @@ +loom.platform=neoforge \ No newline at end of file diff --git a/config-neoforge/src/main/java/io/github/manasmods/manascore/config/neoforge/ManasCoreConfigNeoForge.java b/config-neoforge/src/main/java/io/github/manasmods/manascore/config/neoforge/ManasCoreConfigNeoForge.java new file mode 100644 index 00000000..cd7e540c --- /dev/null +++ b/config-neoforge/src/main/java/io/github/manasmods/manascore/config/neoforge/ManasCoreConfigNeoForge.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2024. ManasMods + * GNU General Public License 3 + */ + +package io.github.manasmods.manascore.config.neoforge; + +import io.github.manasmods.manascore.config.ModuleConstants; +import net.neoforged.fml.common.Mod; + +@Mod(ModuleConstants.MOD_ID) +public class ManasCoreConfigNeoForge { + +} diff --git a/config-neoforge/src/main/resources/META-INF/neoforge.mods.toml b/config-neoforge/src/main/resources/META-INF/neoforge.mods.toml new file mode 100644 index 00000000..dfbcf412 --- /dev/null +++ b/config-neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -0,0 +1,38 @@ +modLoader = "javafml" +loaderVersion = "[2,)" +issueTrackerURL = "" +license = "${license}" + +[[mods]] +modId = "${mod_id}" +version = "${version}" +displayName = "${mod_name}" +authors = "ManasMods" +description = ''' +Utility and Core Library for Manas Mods +''' +logoFile = "icon.png" + +[[dependencies.${mod_id}]] + modId = "neoforge" + type = "required" + versionRange = "[21,)" + ordering = "NONE" + side = "BOTH" + +[[dependencies.${mod_id}]] + modId = "minecraft" + type = "required" + versionRange = "[${minecraft_version},)" + ordering = "NONE" + side = "BOTH" + +[[dependencies.${mod_id}]] + modId = "architectury" + type = "required" + versionRange = "[${architectury_version},)" + ordering = "AFTER" + side = "BOTH" + +[[mixins]] +config = "${mod_id}.mixins.json" diff --git a/config-neoforge/src/main/resources/icon.png b/config-neoforge/src/main/resources/icon.png new file mode 100644 index 00000000..c9a7b039 Binary files /dev/null and b/config-neoforge/src/main/resources/icon.png differ diff --git a/inventory-fabric/src/main/java/io/github/manasmods/manascore/inventory/fabric/ManasCoreInventoryFabric.java b/inventory-fabric/src/main/java/io/github/manasmods/manascore/inventory/fabric/ManasCoreInventoryFabric.java index a795e1f3..f8ad6d10 100644 --- a/inventory-fabric/src/main/java/io/github/manasmods/manascore/inventory/fabric/ManasCoreInventoryFabric.java +++ b/inventory-fabric/src/main/java/io/github/manasmods/manascore/inventory/fabric/ManasCoreInventoryFabric.java @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2024. ManasMods + * GNU General Public License 3 + */ + package io.github.manasmods.manascore.inventory.fabric; import io.github.manasmods.manascore.inventory.ManasCoreInventory; diff --git a/settings.gradle b/settings.gradle index 2cdd04a9..22310168 100644 --- a/settings.gradle +++ b/settings.gradle @@ -14,7 +14,7 @@ pluginManagement { rootProject.name = 'manascore' -["network", "storage", "testing", "inventory", "command"].forEach { module -> +["network", "storage", "testing", "inventory", "config", "command"].forEach { module -> include ":$module-common" include ":$module-fabric" include ":$module-neoforge" diff --git a/testing-common/build.gradle b/testing-common/build.gradle index 359dbaf6..57d476a4 100644 --- a/testing-common/build.gradle +++ b/testing-common/build.gradle @@ -8,7 +8,8 @@ ext { ":network", ":storage", ":inventory", - ':command' + ":config", + ":command" ] } diff --git a/testing-common/src/main/java/io/github/manasmods/manascore/testing/ManasCoreTesting.java b/testing-common/src/main/java/io/github/manasmods/manascore/testing/ManasCoreTesting.java index e735037f..ed33b530 100644 --- a/testing-common/src/main/java/io/github/manasmods/manascore/testing/ManasCoreTesting.java +++ b/testing-common/src/main/java/io/github/manasmods/manascore/testing/ManasCoreTesting.java @@ -7,6 +7,7 @@ import dev.architectury.platform.Platform; import io.github.manasmods.manascore.testing.client.ManasCoreTestingClient; +import io.github.manasmods.manascore.testing.module.ConfigModuleTest; import io.github.manasmods.manascore.testing.module.CommandModuleTest; import io.github.manasmods.manascore.testing.module.StorageModuleTest; import net.fabricmc.api.EnvType; @@ -21,6 +22,7 @@ public static void init() { ManasCoreTestingClient.init(); } StorageModuleTest.init(); + ConfigModuleTest.init(); CommandModuleTest.init(); } } diff --git a/testing-common/src/main/java/io/github/manasmods/manascore/testing/configs/TestConfig.java b/testing-common/src/main/java/io/github/manasmods/manascore/testing/configs/TestConfig.java new file mode 100644 index 00000000..f758712a --- /dev/null +++ b/testing-common/src/main/java/io/github/manasmods/manascore/testing/configs/TestConfig.java @@ -0,0 +1,11 @@ +package io.github.manasmods.manascore.testing.configs; + +import io.github.manasmods.manascore.config.api.ManasConfig; + +public class TestConfig extends ManasConfig { + + public String test = ""; + public int test2 = 0; + public boolean test3 = false; + +} diff --git a/testing-common/src/main/java/io/github/manasmods/manascore/testing/module/ConfigModuleTest.java b/testing-common/src/main/java/io/github/manasmods/manascore/testing/module/ConfigModuleTest.java new file mode 100644 index 00000000..b303cfd9 --- /dev/null +++ b/testing-common/src/main/java/io/github/manasmods/manascore/testing/module/ConfigModuleTest.java @@ -0,0 +1,19 @@ +package io.github.manasmods.manascore.testing.module; + +import io.github.manasmods.manascore.config.ConfigRegistry; +import io.github.manasmods.manascore.testing.configs.TestConfig; + +public class ConfigModuleTest { + + public static void init() { + System.out.println("ConfigModuleTest initialized"); + ConfigRegistry.registerConfig(new TestConfig()); + ConfigRegistry.createConfigs(); + + TestConfig config = (TestConfig) ConfigRegistry.getConfig(TestConfig.class); + System.out.println(config.test); + + } + + +}