diff --git a/src/main/java/com/drmangotea/createindustry/CreateTFMG.java b/src/main/java/com/drmangotea/createindustry/CreateTFMG.java index 378ac9d2..080e57ee 100644 --- a/src/main/java/com/drmangotea/createindustry/CreateTFMG.java +++ b/src/main/java/com/drmangotea/createindustry/CreateTFMG.java @@ -1,6 +1,7 @@ package com.drmangotea.createindustry; import com.drmangotea.createindustry.base.TFMGLangPartials; +import com.drmangotea.createindustry.config.TFMGConfigs; import com.drmangotea.createindustry.items.gadgets.explosives.thermite_grenades.fire.TFMGColoredFires; import com.drmangotea.createindustry.registry.*; import com.drmangotea.createindustry.worldgen.TFMGConfiguredFeatures; @@ -21,6 +22,7 @@ import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; @@ -60,6 +62,8 @@ public class CreateTFMG TFMGFeatures.register(modEventBus); TFMGRecipeTypes.register(modEventBus); + TFMGConfigs.register(ModLoadingContext.get()); + // MinecraftForge.EVENT_BUS.register(this); modEventBus.addListener(EventPriority.LOWEST, CreateTFMG::gatherData); diff --git a/src/main/java/com/drmangotea/createindustry/config/ServerConfig.java b/src/main/java/com/drmangotea/createindustry/config/ServerConfig.java new file mode 100644 index 00000000..bd8a545e --- /dev/null +++ b/src/main/java/com/drmangotea/createindustry/config/ServerConfig.java @@ -0,0 +1,13 @@ +package com.drmangotea.createindustry.config; + +import com.simibubi.create.foundation.config.ConfigBase; + +public class ServerConfig extends ConfigBase { + + public final StressConfig stressValues = nested(0, StressConfig::new, "Fine tune the kinetic stats of individual components"); + + @Override + public String getName() { + return "server"; + } +} diff --git a/src/main/java/com/drmangotea/createindustry/config/StressConfig.java b/src/main/java/com/drmangotea/createindustry/config/StressConfig.java new file mode 100644 index 00000000..b32c332e --- /dev/null +++ b/src/main/java/com/drmangotea/createindustry/config/StressConfig.java @@ -0,0 +1,109 @@ +package com.drmangotea.createindustry.config; + +import com.drmangotea.createindustry.CreateTFMG; +import com.simibubi.create.content.kinetics.BlockStressDefaults; +import com.simibubi.create.content.kinetics.BlockStressValues.IStressValueProvider; +import com.simibubi.create.foundation.config.ConfigBase; +import com.simibubi.create.foundation.utility.Couple; +import com.simibubi.create.foundation.utility.RegisteredObjects; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.common.ForgeConfigSpec.Builder; +import net.minecraftforge.common.ForgeConfigSpec.ConfigValue; +import org.jetbrains.annotations.Nullable; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Supplier; + +public class StressConfig extends ConfigBase implements IStressValueProvider { + + private final Map> capacities = new HashMap<>(); + private final Map> impacts = new HashMap<>(); + + @Override + public void registerAll(Builder builder) { + builder.comment(".", Comments.su, Comments.impact) + .push("impact"); + BlockStressDefaults.DEFAULT_IMPACTS.forEach((r, i) -> { + if (r.getNamespace() + .equals(CreateTFMG.MOD_ID)) + getImpacts().put(r, builder.define(r.getPath(), i)); + }); + builder.pop(); + + builder.comment(".", Comments.su, Comments.capacity) + .push("capacity"); + BlockStressDefaults.DEFAULT_CAPACITIES.forEach((r, i) -> { + if (r.getNamespace() + .equals(CreateTFMG.MOD_ID)) + getCapacities().put(r, builder.define(r.getPath(), i)); + }); + builder.pop(); + } + + @Override + public String getName() { + return "stressValues"; + } + + @Override + public double getImpact(Block block) { + block = redirectValues(block); + ResourceLocation key = RegisteredObjects.getKeyOrThrow(block); + ConfigValue value = getImpacts().get(key); + if(value != null) return value.get(); + return 0; + } + + @Override + public double getCapacity(Block block) { + block = redirectValues(block); + ResourceLocation key = RegisteredObjects.getKeyOrThrow(block); + ConfigValue value = getCapacities().get(key); + if(value != null) return value.get(); + return 0; + } + + @Override + public boolean hasImpact(Block block) { + block = redirectValues(block); + ResourceLocation key = RegisteredObjects.getKeyOrThrow(block); + return getImpacts().containsKey(key); + } + + @Override + public boolean hasCapacity(Block block) { + block = redirectValues(block); + ResourceLocation key = RegisteredObjects.getKeyOrThrow(block); + return getCapacities().containsKey(key); + } + + @Nullable + @Override + public Couple getGeneratedRPM(Block block) { + block = redirectValues(block); + ResourceLocation key = RegisteredObjects.getKeyOrThrow(block); + Supplier> supplier = BlockStressDefaults.GENERATOR_SPEEDS.get(key); + if(supplier == null) return null; + return supplier.get(); + } + + protected Block redirectValues(Block block) { + return block; + } + + public Map> getImpacts() { + return impacts; + } + + public Map> getCapacities() { + return capacities; + } + + private static class Comments { + static String su = "[in Stress Units]"; + static String impact = "Configure the individual stress impact of mechanical blocks. Note that this cost is doubled for every speed increase it receives"; + static String capacity = "Configure how much stress a source can accommodate for."; + } +} diff --git a/src/main/java/com/drmangotea/createindustry/config/TFMGConfigs.java b/src/main/java/com/drmangotea/createindustry/config/TFMGConfigs.java new file mode 100644 index 00000000..1a6f268a --- /dev/null +++ b/src/main/java/com/drmangotea/createindustry/config/TFMGConfigs.java @@ -0,0 +1,70 @@ +package com.drmangotea.createindustry.config; + +import com.simibubi.create.content.kinetics.BlockStressValues; +import com.simibubi.create.foundation.config.ConfigBase; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +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.function.Supplier; + +@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) +public class TFMGConfigs { + + private static final Map CONFIGS = new EnumMap<>(ModConfig.Type.class); + + private static ServerConfig server; + + public static ServerConfig server() { + return server; + } + + 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) { + server = register(ServerConfig::new, ModConfig.Type.SERVER); + + for (Map.Entry pair : CONFIGS.entrySet()) + context.registerConfig(pair.getKey(), pair.getValue().specification); + + BlockStressValues.registerProvider(context.getActiveNamespace(), server().stressValues); + } + + @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/com/drmangotea/createindustry/config/WorldGenConfig.java b/src/main/java/com/drmangotea/createindustry/config/WorldGenConfig.java new file mode 100644 index 00000000..c0992124 --- /dev/null +++ b/src/main/java/com/drmangotea/createindustry/config/WorldGenConfig.java @@ -0,0 +1,27 @@ +package com.drmangotea.createindustry.config; + +import com.simibubi.create.foundation.config.ConfigBase; + +public class WorldGenConfig extends ConfigBase { + + /** + * Increment this number if all worldgen config entries should be overwritten + * in this update. Worlds from the previous version will overwrite potentially + * changed values with the new defaults. + */ + public static final int FORCED_UPDATE_VERSION = 1; + + public final ConfigBool disableOil = b(false, "disableOil", Comments.disableOil); + public final ConfigBool disableSimulatedOil = b(false, "disableSimulatedOil", Comments.disableSimulatedOil); + + + @Override + public String getName() { + return "worldgen" + FORCED_UPDATE_VERSION; + } + + private static class Comments { + static String disableOil = "Prevents oil geodes from spawning"; + static String disableSimulatedOil = "Prevents oil deposit veins from spawning in bedrock"; + } +}