From 2c418977d0af3f19ab6eed58148567115746bbd5 Mon Sep 17 00:00:00 2001 From: Giovanni Date: Wed, 19 Mar 2025 16:59:23 +0100 Subject: [PATCH] Add configuration classes for reactor settings and world generation --- .../createnuclear/CreateNuclear.java | 3 + .../infrastructure/config/CExplose.java | 20 ++++++ .../infrastructure/config/CNCClient.java | 4 ++ .../infrastructure/config/CNCCommon.java | 20 ++++++ .../infrastructure/config/CNCServer.java | 4 ++ .../infrastructure/config/CNConfigs.java | 72 +++++++++++++++++++ .../infrastructure/config/CRods.java | 22 ++++++ .../infrastructure/config/CWorldGen.java | 16 +++++ 8 files changed, 161 insertions(+) create mode 100644 src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CExplose.java create mode 100644 src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNCClient.java create mode 100644 src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNCCommon.java create mode 100644 src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNCServer.java create mode 100644 src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNConfigs.java create mode 100644 src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CRods.java create mode 100644 src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CWorldGen.java diff --git a/src/main/java/net/nuclearteam/createnuclear/CreateNuclear.java b/src/main/java/net/nuclearteam/createnuclear/CreateNuclear.java index d555f464..5becc7b4 100644 --- a/src/main/java/net/nuclearteam/createnuclear/CreateNuclear.java +++ b/src/main/java/net/nuclearteam/createnuclear/CreateNuclear.java @@ -23,6 +23,7 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.RegisterEvent; import net.nuclearteam.createnuclear.content.kinetics.fan.processing.CNFanProcessingTypes; +import net.nuclearteam.createnuclear.infrastructure.config.CNConfigs; import net.nuclearteam.createnuclear.infrastructure.data.CreateNuclearDatagen; import org.slf4j.Logger; @@ -63,6 +64,8 @@ public static void onInitialize() { CNFluids.register(); CNEntityType.register(); + CNConfigs.register(modLoadingContext); + CNCreativeModeTabs.register(modEventBus); CNEffects.register(modEventBus); CNPotions.register(modEventBus); diff --git a/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CExplose.java b/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CExplose.java new file mode 100644 index 00000000..1f271674 --- /dev/null +++ b/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CExplose.java @@ -0,0 +1,20 @@ +package net.nuclearteam.createnuclear.infrastructure.config; + +import net.createmod.catnip.config.ConfigBase; + +public class CExplose extends ConfigBase { + public final ConfigInt size = i(10, "Size of the reactor explosion"); + public final ConfigInt type = i(1, 0, 2, "Type of explosion", Comments.type); + public final ConfigInt time = i(600, 100, 1200, "Duration before exploration", Comments.explosionTime, Comments.hintExplosion); + + @Override + public String getName() { + return "Explosion Reactor"; + } + + private static class Comments { + static String explosionTime = "Create Nuclear Explosion Time"; + static String hintExplosion = "300 ticks = 15 seconds"; + static String type = "Explanation: 0 = no explosion, 1 = current explosion, 2 = new explosion."; + } +} diff --git a/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNCClient.java b/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNCClient.java new file mode 100644 index 00000000..0bbd8993 --- /dev/null +++ b/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNCClient.java @@ -0,0 +1,4 @@ +package net.nuclearteam.createnuclear.infrastructure.config; + +public class CNCClient { +} diff --git a/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNCCommon.java b/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNCCommon.java new file mode 100644 index 00000000..cf642f72 --- /dev/null +++ b/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNCCommon.java @@ -0,0 +1,20 @@ +package net.nuclearteam.createnuclear.infrastructure.config; + +import net.createmod.catnip.config.ConfigBase; + +public class CNCCommon extends ConfigBase { + public final CWorldGen worldGen = nested(0, CWorldGen::new, Comments.worldGen); + public final CRods rods = nested(0, CRods::new, Comments.rods); + public final CExplose explode = nested(0, CExplose::new, Comments.explode); + + @Override + public String getName() { + return "Common"; + } + + private static class Comments { + static String worldGen = "Modify CreateNuclear's impact on your terrain"; + static String rods = "Modify rods time and config"; + static String explode = "Explose: pas d'idée"; + } +} diff --git a/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNCServer.java b/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNCServer.java new file mode 100644 index 00000000..6192b4d5 --- /dev/null +++ b/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNCServer.java @@ -0,0 +1,4 @@ +package net.nuclearteam.createnuclear.infrastructure.config; + +public class CNCServer { +} diff --git a/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNConfigs.java b/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNConfigs.java new file mode 100644 index 00000000..6a3434a7 --- /dev/null +++ b/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CNConfigs.java @@ -0,0 +1,72 @@ +package net.nuclearteam.createnuclear.infrastructure.config; + +import net.createmod.catnip.config.ConfigBase; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.config.ModConfig; + +import net.minecraftforge.fml.event.config.ModConfigEvent; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.EnumMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.function.Supplier; + +@EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD) +public class CNConfigs { + private static final Map CONFIGS = new EnumMap<>(ModConfig.Type.class); + + private static CNCClient client; + private static CNCCommon common; + private static CNCServer server; + + public static CNCCommon common() { + return common; + } + + public static ConfigBase byType(ModConfig.Type type) { + return CONFIGS.get(type); + } + + private static T register(Supplier factory, ModConfig.Type side) { + Pair specPair = new ForgeConfigSpec.Builder().configure(builder -> { + T config = factory.get(); + config.registerAll(builder); + return config; + }); + + T config = specPair.getLeft(); + config.specification = specPair.getRight(); + CONFIGS.put(side, config); + return config; + } + + public static void register(ModLoadingContext context) { + common = register(CNCCommon::new, ModConfig.Type.COMMON); + + for (Entry entry : CONFIGS.entrySet()) { + context.registerConfig(entry.getKey(), entry.getValue().specification); + } + } + + @SubscribeEvent + public static void onLoad(ModConfigEvent.Loading event) { + for (ConfigBase config : CONFIGS.values()) { + if (config.specification == event.getConfig().getSpec()) { + config.onLoad(); + } + } + } + + @SubscribeEvent + public static void onReload(ModConfigEvent.Reloading event) { + for (ConfigBase config : CONFIGS.values()) { + if (config.specification == event.getConfig().getSpec()) { + config.onReload(); + } + } + } +} diff --git a/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CRods.java b/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CRods.java new file mode 100644 index 00000000..947b9f43 --- /dev/null +++ b/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CRods.java @@ -0,0 +1,22 @@ +package net.nuclearteam.createnuclear.infrastructure.config; + +import net.createmod.catnip.config.ConfigBase; + +public class CRods extends ConfigBase { + public final ConfigInt uraniumRodLifetime = i(3600, 100, 5000, "Uranium rod lifespan", Comments.UraniumRodLifetime, Comments.hintTick); + public final ConfigInt graphiteRodLifetime = i(3600, 100, 5000, "Graphite rod lifespan", Comments.GraphiteRodLifetime, Comments.hintTick); + public final ConfigInt maxHeat = i(1000, 200, 1000, "Maximum reactor heat", Comments.maxHeat, Comments.hintHeat); + + @Override + public String getName() { + return "Rods"; + } + + private static class Comments { + static String hintTick = "20 ticks = 1 second"; + static String UraniumRodLifetime = "Uranium rod lifespan in reactor"; + static String GraphiteRodLifetime = "Graphite rod lifespan in reactor"; + static String maxHeat = "Maximum heat a reactor block can handle"; + static String hintHeat = "Avoids reactor failure due to excessive heat"; + } +} diff --git a/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CWorldGen.java b/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CWorldGen.java new file mode 100644 index 00000000..ea7de34e --- /dev/null +++ b/src/main/java/net/nuclearteam/createnuclear/infrastructure/config/CWorldGen.java @@ -0,0 +1,16 @@ +package net.nuclearteam.createnuclear.infrastructure.config; + +import net.createmod.catnip.config.ConfigBase; + +public class CWorldGen extends ConfigBase { + public final ConfigBool disable = b(false, "disableWorldGen", Comments.disable); + + @Override + public String getName() { + return "worldGen"; + } + + private static class Comments { + static String disable = "Prevents all worldgen added by Create from taking effect"; + } +}