diff --git a/build.gradle b/build.gradle index 9d4effba833..742555aacf1 100644 --- a/build.gradle +++ b/build.gradle @@ -376,7 +376,10 @@ dependencies { localRuntime(emi) } else { //We still need it to load in datagen regardless of if we are using emi or a different viewer so that we can access EMI related objects - datagenMainRuntimeOnly(emi) + //TODO - 1.21: Make a PR to EMI to bootstrap in datagen, and more importantly be able to somehow provide the registry access context + // rather than it trying to grab it from Minecraft.getInstance().level as Minecraft.getInstance() is null in datagen + // As https://github.com/emilyploszaj/emi/pull/600 broke it + //datagenMainRuntimeOnly(emi) } //TODO: Re-enable once it doesn't cause Datagen to fail diff --git a/gradle.properties b/gradle.properties index 7dc7ead6e07..c80aeff1d10 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,11 +9,11 @@ minecraft_version=1.21 previous_minecraft_version=1.20.4 previous_minor_minecraft_version=1.20.6 loader_version_range=[4,) -forge_version=21.0.78-beta +forge_version=21.0.86-beta mod_version=10.6.4 #This determines the minimum version of forge required to use Mekanism # Only bump it whenever we need access to a feature in forge that is not available in earlier versions -forge_version_range=[21.0.58-beta,) +forge_version_range=[21.0.86-beta,) minecraft_version_range=[1.21] #This specifies what type of release it will be uploaded to CurseForge and Modrinth as # options are: alpha, beta, release @@ -37,14 +37,14 @@ yamlops_version=1.2.0 #Mod dependencies cc_tweaked_version=1.111.0 -crafttweaker_version=20.0.15 +crafttweaker_version=20.0.17 ctm_version=1.2.0+1 curios_version=9.0.4+1.21 emi_version=1.1.10 grand_power_version=3.0.0 jade_api_id=5427895 jade_id=5493270 -jei_version=19.1.1.19 +jei_version=19.5.0.30 json_things_version=0.12.0 top_version=1.21_neo-12.0.0-1 wthit_version=12.2.2 diff --git a/src/additions/java/mekanism/additions/common/MekanismAdditions.java b/src/additions/java/mekanism/additions/common/MekanismAdditions.java index 8a16b3a5f8c..d5d3587b40f 100644 --- a/src/additions/java/mekanism/additions/common/MekanismAdditions.java +++ b/src/additions/java/mekanism/additions/common/MekanismAdditions.java @@ -16,7 +16,6 @@ import mekanism.additions.common.voice.VoiceServerManager; import mekanism.common.Mekanism; import mekanism.common.base.IModModule; -import mekanism.common.config.MekanismModConfig; import mekanism.common.lib.Version; import mekanism.common.registration.impl.ItemRegistryObject; import net.minecraft.core.BlockPos; @@ -32,8 +31,6 @@ import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; import net.neoforged.fml.common.Mod; -import net.neoforged.fml.config.ModConfig; -import net.neoforged.fml.event.config.ModConfigEvent; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.event.server.ServerStartingEvent; @@ -67,7 +64,7 @@ public MekanismAdditions(ModContainer modContainer, IEventBus modEventBus) { NeoForge.EVENT_BUS.addListener(this::serverStopping); modEventBus.addListener(this::commonSetup); - modEventBus.addListener(this::onConfigLoad); + modEventBus.addListener(MekanismAdditionsConfig::onConfigLoad); AdditionsDataComponents.DATA_COMPONENTS.register(modEventBus); AdditionsItems.ITEMS.register(modEventBus); AdditionsBlocks.BLOCKS.register(modEventBus); @@ -158,12 +155,4 @@ private void serverStopping(ServerStoppingEvent event) { voiceManager = null; } } - - private void onConfigLoad(ModConfigEvent configEvent) { - ModConfig config = configEvent.getConfig(); - //Make sure it is for the same modid as us - if (config.getModId().equals(MODID) && config instanceof MekanismModConfig mekConfig) { - mekConfig.clearCache(configEvent); - } - } } \ No newline at end of file diff --git a/src/additions/java/mekanism/additions/common/config/MekanismAdditionsConfig.java b/src/additions/java/mekanism/additions/common/config/MekanismAdditionsConfig.java index 2dd1768b3d8..ba25caae603 100644 --- a/src/additions/java/mekanism/additions/common/config/MekanismAdditionsConfig.java +++ b/src/additions/java/mekanism/additions/common/config/MekanismAdditionsConfig.java @@ -1,18 +1,29 @@ package mekanism.additions.common.config; +import java.util.HashMap; +import java.util.Map; +import mekanism.additions.common.MekanismAdditions; +import mekanism.common.config.IMekanismConfig; import mekanism.common.config.MekanismConfigHelper; import net.neoforged.fml.ModContainer; +import net.neoforged.fml.config.IConfigSpec; +import net.neoforged.fml.event.config.ModConfigEvent; public class MekanismAdditionsConfig { private MekanismAdditionsConfig() { } + private static final Map KNOWN_CONFIGS = new HashMap<>(); public static final AdditionsConfig additions = new AdditionsConfig(); public static final AdditionsClientConfig client = new AdditionsClientConfig(); public static void registerConfigs(ModContainer modContainer) { - MekanismConfigHelper.registerConfig(modContainer, client); - MekanismConfigHelper.registerConfig(modContainer, additions); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, client); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, additions); + } + + public static void onConfigLoad(ModConfigEvent configEvent) { + MekanismConfigHelper.onConfigLoad(configEvent, MekanismAdditions.MODID, KNOWN_CONFIGS); } } \ No newline at end of file diff --git a/src/datagen/main/java/mekanism/common/MekanismDataGenerator.java b/src/datagen/main/java/mekanism/common/MekanismDataGenerator.java index c0361987cba..14c3326ef51 100644 --- a/src/datagen/main/java/mekanism/common/MekanismDataGenerator.java +++ b/src/datagen/main/java/mekanism/common/MekanismDataGenerator.java @@ -1,15 +1,22 @@ package mekanism.common; import com.electronwill.nightconfig.core.CommentedConfig; +import com.electronwill.nightconfig.core.InMemoryCommentedFormat; +import com.electronwill.nightconfig.core.concurrent.SynchronizedConfig; import com.google.common.hash.Hashing; import com.google.common.hash.HashingOutputStream; import com.google.gson.JsonElement; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; import java.nio.file.Path; +import java.util.EnumMap; +import java.util.LinkedHashMap; import java.util.Set; import java.util.concurrent.CompletableFuture; +import java.util.function.Function; import mekanism.client.lang.MekanismLangProvider; import mekanism.client.model.MekanismItemModelProvider; import mekanism.client.sound.MekanismSoundProvider; @@ -18,6 +25,7 @@ import mekanism.client.texture.PrideRobitTextureProvider; import mekanism.common.advancements.MekanismAdvancementProvider; import mekanism.common.integration.computer.ComputerHelpProvider; +import mekanism.common.lib.FieldReflectionHelper; import mekanism.common.loot.MekanismLootProvider; import mekanism.common.recipe.impl.MekanismRecipeProvider; import mekanism.common.registries.MekanismDatapackRegistryProvider; @@ -32,12 +40,32 @@ import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.config.ConfigTracker; import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.event.config.ModConfigEvent; +import net.neoforged.fml.util.ObfuscationReflectionHelper; import net.neoforged.neoforge.common.data.ExistingFileHelper; import net.neoforged.neoforge.data.event.GatherDataEvent; @EventBusSubscriber(modid = Mekanism.MODID, bus = EventBusSubscriber.Bus.MOD) public class MekanismDataGenerator { + @SuppressWarnings("UnstableApiUsage") + private static final FieldReflectionHelper>> CONFIG_SETS = + new FieldReflectionHelper<>(ConfigTracker.class, "configSets", () -> new EnumMap<>(ModConfig.Type.class)); + private static final Constructor LOADED_CONFIG; + private static final Method SET_CONFIG; + + static { + Class loadedConfig; + try { + loadedConfig = Class.forName("net.neoforged.fml.config.LoadedConfig"); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + LOADED_CONFIG = ObfuscationReflectionHelper.findConstructor(loadedConfig, CommentedConfig.class, Path.class, ModConfig.class); + SET_CONFIG = ObfuscationReflectionHelper.findMethod(ModConfig.class, "setConfig", loadedConfig, Function.class); + } + + private MekanismDataGenerator() { } @@ -75,17 +103,23 @@ public static void gatherData(GatherDataEvent event) { * Used to bootstrap configs to their default values so that if we are querying if things exist we don't have issues with it happening to early or in cases we have * fake tiles. */ + @SuppressWarnings("UnstableApiUsage") public static void bootstrapConfigs(String modid) { - for (Set configs : ConfigTracker.INSTANCE.configSets().values()) { + for (Set configs : CONFIG_SETS.getValue(ConfigTracker.INSTANCE).values()) { for (ModConfig config : configs) { if (config.getModId().equals(modid)) { //Similar to how ConfigTracker#loadDefaultServerConfigs works for loading default server configs on the client // except we don't bother firing an event as it is private, and we are already at defaults if we had called earlier, // and we also don't fully initialize the mod config as the spec is what we care about, and we can do so without having // to reflect into package private methods - CommentedConfig commentedConfig = CommentedConfig.inMemory(); + CommentedConfig commentedConfig = new SynchronizedConfig(InMemoryCommentedFormat.defaultInstance(), LinkedHashMap::new); config.getSpec().correct(commentedConfig); - config.getSpec().acceptConfig(commentedConfig); + try { + SET_CONFIG.invoke(config, LOADED_CONFIG.newInstance(commentedConfig, null, config), + (Function) ModConfigEvent.Loading::new); + } catch (Throwable e) { + throw new RuntimeException(e); + } } } } diff --git a/src/defense/java/mekanism/defense/common/MekanismDefense.java b/src/defense/java/mekanism/defense/common/MekanismDefense.java index 1acb990801c..f293b7dd74b 100644 --- a/src/defense/java/mekanism/defense/common/MekanismDefense.java +++ b/src/defense/java/mekanism/defense/common/MekanismDefense.java @@ -2,7 +2,6 @@ import mekanism.common.Mekanism; import mekanism.common.base.IModModule; -import mekanism.common.config.MekanismModConfig; import mekanism.common.lib.Version; import mekanism.defense.common.config.MekanismDefenseConfig; import mekanism.defense.common.registries.DefenseBlocks; @@ -14,8 +13,6 @@ import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; import net.neoforged.fml.common.Mod; -import net.neoforged.fml.config.ModConfig; -import net.neoforged.fml.event.config.ModConfigEvent; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.event.server.ServerStoppedEvent; @@ -40,7 +37,7 @@ public MekanismDefense(ModContainer modContainer, IEventBus modEventBus) { NeoForge.EVENT_BUS.addListener(this::serverStopped); modEventBus.addListener(this::commonSetup); - modEventBus.addListener(this::onConfigLoad); + modEventBus.addListener(MekanismDefenseConfig::onConfigLoad); DefenseItems.ITEMS.register(modEventBus); DefenseBlocks.BLOCKS.register(modEventBus); DefenseCreativeTabs.CREATIVE_TABS.register(modEventBus); @@ -73,14 +70,4 @@ public String getName() { @Override public void resetClient() { } - - private void onConfigLoad(ModConfigEvent configEvent) { - //Note: We listen to both the initial load and the reload, to make sure that we fix any accidentally - // cached values from calls before the initial loading - ModConfig config = configEvent.getConfig(); - //Make sure it is for the same modid as us - if (config.getModId().equals(MODID) && config instanceof MekanismModConfig mekConfig) { - mekConfig.clearCache(configEvent); - } - } } \ No newline at end of file diff --git a/src/defense/java/mekanism/defense/common/config/MekanismDefenseConfig.java b/src/defense/java/mekanism/defense/common/config/MekanismDefenseConfig.java index ebaf8d081ec..a05ac1fadba 100644 --- a/src/defense/java/mekanism/defense/common/config/MekanismDefenseConfig.java +++ b/src/defense/java/mekanism/defense/common/config/MekanismDefenseConfig.java @@ -1,16 +1,27 @@ package mekanism.defense.common.config; +import java.util.HashMap; +import java.util.Map; +import mekanism.common.config.IMekanismConfig; import mekanism.common.config.MekanismConfigHelper; +import mekanism.defense.common.MekanismDefense; import net.neoforged.fml.ModContainer; +import net.neoforged.fml.config.IConfigSpec; +import net.neoforged.fml.event.config.ModConfigEvent; public class MekanismDefenseConfig { private MekanismDefenseConfig() { } + private static final Map KNOWN_CONFIGS = new HashMap<>(); public static final DefenseConfig defense = new DefenseConfig(); public static void registerConfigs(ModContainer modContainer) { - MekanismConfigHelper.registerConfig(modContainer, defense); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, defense); + } + + public static void onConfigLoad(ModConfigEvent configEvent) { + MekanismConfigHelper.onConfigLoad(configEvent, MekanismDefense.MODID, KNOWN_CONFIGS); } } \ No newline at end of file diff --git a/src/generators/java/mekanism/generators/common/MekanismGenerators.java b/src/generators/java/mekanism/generators/common/MekanismGenerators.java index b843f94bee8..fa30c05273b 100644 --- a/src/generators/java/mekanism/generators/common/MekanismGenerators.java +++ b/src/generators/java/mekanism/generators/common/MekanismGenerators.java @@ -7,7 +7,6 @@ import mekanism.common.base.IModModule; import mekanism.common.command.builders.BuildCommand; import mekanism.common.config.MekanismConfig; -import mekanism.common.config.MekanismModConfig; import mekanism.common.config.listener.ConfigBasedCachedFLSupplier; import mekanism.common.lib.Version; import mekanism.common.lib.multiblock.MultiblockManager; @@ -41,8 +40,6 @@ import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; import net.neoforged.fml.common.Mod; -import net.neoforged.fml.config.ModConfig; -import net.neoforged.fml.event.config.ModConfigEvent; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; import net.neoforged.fml.event.lifecycle.InterModEnqueueEvent; @@ -77,7 +74,7 @@ public MekanismGenerators(ModContainer modContainer, IEventBus modEventBus) { versionNumber = new Version(modContainer); MekanismGeneratorsConfig.registerConfigs(modContainer); modEventBus.addListener(this::commonSetup); - modEventBus.addListener(this::onConfigLoad); + modEventBus.addListener(MekanismGeneratorsConfig::onConfigLoad); modEventBus.addListener(this::imcQueue); GeneratorsDataComponents.DATA_COMPONENTS.register(modEventBus); @@ -138,14 +135,4 @@ public String getName() { public void resetClient() { TurbineMultiblockData.clientRotationMap.clear(); } - - private void onConfigLoad(ModConfigEvent configEvent) { - //Note: We listen to both the initial load and the reload, to make sure that we fix any accidentally - // cached values from calls before the initial loading - ModConfig config = configEvent.getConfig(); - //Make sure it is for the same modid as us - if (config.getModId().equals(MODID) && config instanceof MekanismModConfig mekConfig) { - mekConfig.clearCache(configEvent); - } - } } diff --git a/src/generators/java/mekanism/generators/common/config/GeneratorsConfig.java b/src/generators/java/mekanism/generators/common/config/GeneratorsConfig.java index 3f11d2f7dee..6565982fd47 100644 --- a/src/generators/java/mekanism/generators/common/config/GeneratorsConfig.java +++ b/src/generators/java/mekanism/generators/common/config/GeneratorsConfig.java @@ -115,7 +115,7 @@ public class GeneratorsConfig extends BaseMekanismConfig { heatTankCapacity = CachedIntValue.wrap(this, builder.comment("The capacity in mB of the fluid tank in the Heat Generator.") .defineInRange("tankCapacity", 24 * FluidType.BUCKET_VOLUME, 1, Integer.MAX_VALUE)); heatGenerationFluidRate = CachedIntValue.wrap(this, builder.comment("The amount of lava in mB that gets consumed to transfer heatGeneration Joules to the Heat Generator.") - .define("heatGenerationFluidRate", 10, value -> value instanceof Integer i && i > 0 && i <= heatTankCapacity.get())); + .define("heatGenerationFluidRate", 10, value -> value instanceof Integer i && i > 0 && i <= heatTankCapacity.getOrDefault())); builder.pop(); builder.comment("Gas-Burning Generator Settings").push(GAS_CATEGORY); @@ -155,7 +155,7 @@ public class GeneratorsConfig extends BaseMekanismConfig { //Note: We just require that the maxY is greater than the minY, nothing goes badly if it is set above the max y of the world though // as it is just used for range clamping windGenerationMaxY = CachedIntValue.wrap(this, builder.comment("The maximum Y value that affects the Wind Generators Power generation. This value gets clamped at the world's logical height.") - .define("maxY", DimensionType.MAX_Y, value -> value instanceof Integer && (Integer) value > windGenerationMinY.get())); + .define("maxY", DimensionType.MAX_Y, value -> value instanceof Integer && (Integer) value > windGenerationMinY.getOrDefault())); //Note: We cannot verify the dimension exists as dimensions are dynamic so may not actually exist when we are validating windGenerationDimBlacklist = CachedResourceLocationListValue.define(this, builder.comment("The list of dimension ids that the Wind Generator will not generate power in."), "windGenerationDimBlacklist", ConstantPredicates.alwaysTrue()); diff --git a/src/generators/java/mekanism/generators/common/config/GeneratorsGearConfig.java b/src/generators/java/mekanism/generators/common/config/GeneratorsGearConfig.java index 5980b0a1c87..1f47498a6a2 100644 --- a/src/generators/java/mekanism/generators/common/config/GeneratorsGearConfig.java +++ b/src/generators/java/mekanism/generators/common/config/GeneratorsGearConfig.java @@ -48,9 +48,4 @@ public ModConfigSpec getConfigSpec() { public Type getConfigType() { return Type.SERVER; } - - @Override - public boolean addToContainer() { - return false; - } } \ No newline at end of file diff --git a/src/generators/java/mekanism/generators/common/config/GeneratorsStorageConfig.java b/src/generators/java/mekanism/generators/common/config/GeneratorsStorageConfig.java index 81e4b10702e..3c7c352e4ae 100644 --- a/src/generators/java/mekanism/generators/common/config/GeneratorsStorageConfig.java +++ b/src/generators/java/mekanism/generators/common/config/GeneratorsStorageConfig.java @@ -49,9 +49,4 @@ public ModConfigSpec getConfigSpec() { public Type getConfigType() { return Type.SERVER; } - - @Override - public boolean addToContainer() { - return false; - } } \ No newline at end of file diff --git a/src/generators/java/mekanism/generators/common/config/MekanismGeneratorsConfig.java b/src/generators/java/mekanism/generators/common/config/MekanismGeneratorsConfig.java index 467171e3238..ad76990500c 100644 --- a/src/generators/java/mekanism/generators/common/config/MekanismGeneratorsConfig.java +++ b/src/generators/java/mekanism/generators/common/config/MekanismGeneratorsConfig.java @@ -1,20 +1,31 @@ package mekanism.generators.common.config; +import java.util.HashMap; +import java.util.Map; +import mekanism.common.config.IMekanismConfig; import mekanism.common.config.MekanismConfigHelper; +import mekanism.generators.common.MekanismGenerators; import net.neoforged.fml.ModContainer; +import net.neoforged.fml.config.IConfigSpec; +import net.neoforged.fml.event.config.ModConfigEvent; public class MekanismGeneratorsConfig { private MekanismGeneratorsConfig() { } + private static final Map KNOWN_CONFIGS = new HashMap<>(); public static final GeneratorsConfig generators = new GeneratorsConfig(); public static final GeneratorsGearConfig gear = new GeneratorsGearConfig(); public static final GeneratorsStorageConfig storageConfig = new GeneratorsStorageConfig(); public static void registerConfigs(ModContainer modContainer) { - MekanismConfigHelper.registerConfig(modContainer, generators); - MekanismConfigHelper.registerConfig(modContainer, gear); - MekanismConfigHelper.registerConfig(modContainer, storageConfig); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, generators); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, gear); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, storageConfig); + } + + public static void onConfigLoad(ModConfigEvent configEvent) { + MekanismConfigHelper.onConfigLoad(configEvent, MekanismGenerators.MODID, KNOWN_CONFIGS); } } \ No newline at end of file diff --git a/src/main/java/mekanism/common/Mekanism.java b/src/main/java/mekanism/common/Mekanism.java index e8685c3ec14..9688a8d5a7c 100644 --- a/src/main/java/mekanism/common/Mekanism.java +++ b/src/main/java/mekanism/common/Mekanism.java @@ -28,7 +28,6 @@ import mekanism.common.command.builders.Builders.SPSBuilder; import mekanism.common.command.builders.Builders.TankBuilder; import mekanism.common.config.MekanismConfig; -import mekanism.common.config.MekanismModConfig; import mekanism.common.content.boiler.BoilerMultiblockData; import mekanism.common.content.boiler.BoilerValidator; import mekanism.common.content.evaporation.EvaporationMultiblockData; @@ -54,11 +53,11 @@ import mekanism.common.item.block.machine.ItemBlockFluidTank.BasicCauldronInteraction; import mekanism.common.item.block.machine.ItemBlockFluidTank.BasicDrainCauldronInteraction; import mekanism.common.item.block.machine.ItemBlockFluidTank.FluidTankItemDispenseBehavior; +import mekanism.common.item.interfaces.IHasConditionalAttributes; import mekanism.common.item.loot.MekanismLootFunctions; import mekanism.common.item.predicate.MekanismItemPredicates; import mekanism.common.lib.MekAnnotationScanner; import mekanism.common.lib.Version; -import mekanism.common.item.interfaces.IHasConditionalAttributes; import mekanism.common.lib.frequency.FrequencyManager; import mekanism.common.lib.frequency.FrequencyType; import mekanism.common.lib.inventory.personalstorage.PersonalStorageManager; @@ -119,8 +118,6 @@ import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; import net.neoforged.fml.common.Mod; -import net.neoforged.fml.config.ModConfig; -import net.neoforged.fml.event.config.ModConfigEvent; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; import net.neoforged.fml.event.lifecycle.InterModEnqueueEvent; import net.neoforged.fml.event.lifecycle.InterModProcessEvent; @@ -211,7 +208,7 @@ public Mekanism(ModContainer modContainer, IEventBus modEventBus) { modEventBus.addListener(Capabilities::registerCapabilities); modEventBus.addListener(this::commonSetup); modEventBus.addListener(this::registerChunkTicketControllers); - modEventBus.addListener(this::onConfigLoad); + modEventBus.addListener(MekanismConfig::onConfigLoad); modEventBus.addListener(this::imcQueue); modEventBus.addListener(this::imcHandle); MekanismItems.ITEMS.register(modEventBus); @@ -442,16 +439,6 @@ private void onModifyItemAttributes(ItemAttributeModifierEvent event) { } } - private void onConfigLoad(ModConfigEvent configEvent) { - //Note: We listen to both the initial load and the reload, to make sure that we fix any accidentally - // cached values from calls before the initial loading - ModConfig config = configEvent.getConfig(); - //Make sure it is for the same modid as us - if (config.getModId().equals(MODID) && config instanceof MekanismModConfig mekConfig) { - mekConfig.clearCache(configEvent); - } - } - private void onWorldLoad(LevelEvent.Load event) { playerState.init(event.getLevel()); } diff --git a/src/main/java/mekanism/common/config/GearConfig.java b/src/main/java/mekanism/common/config/GearConfig.java index 4caeaa2d844..e4f6013d60c 100644 --- a/src/main/java/mekanism/common/config/GearConfig.java +++ b/src/main/java/mekanism/common/config/GearConfig.java @@ -356,9 +356,4 @@ public ModConfigSpec getConfigSpec() { public Type getConfigType() { return Type.SERVER; } - - @Override - public boolean addToContainer() { - return false; - } } diff --git a/src/main/java/mekanism/common/config/IMekanismConfig.java b/src/main/java/mekanism/common/config/IMekanismConfig.java index 21154b1d6f4..8f673ed7547 100644 --- a/src/main/java/mekanism/common/config/IMekanismConfig.java +++ b/src/main/java/mekanism/common/config/IMekanismConfig.java @@ -23,12 +23,4 @@ default void save() { void clearCache(boolean unloading); void addCachedValue(CachedValue configValue); - - /** - * Should this config be added to the mods "config" files. Make this return false to only create the config. This will allow it to be tracked, but not override the - * value that has already been added to this mod's container. As the list is from config type to mod config. - */ - default boolean addToContainer() { - return true; - } } \ No newline at end of file diff --git a/src/main/java/mekanism/common/config/MekanismConfig.java b/src/main/java/mekanism/common/config/MekanismConfig.java index 038d40647d1..4c48b836572 100644 --- a/src/main/java/mekanism/common/config/MekanismConfig.java +++ b/src/main/java/mekanism/common/config/MekanismConfig.java @@ -1,12 +1,18 @@ package mekanism.common.config; +import java.util.HashMap; +import java.util.Map; +import mekanism.common.Mekanism; import net.neoforged.fml.ModContainer; +import net.neoforged.fml.config.IConfigSpec; +import net.neoforged.fml.event.config.ModConfigEvent; public class MekanismConfig { private MekanismConfig() { } + private static final Map KNOWN_CONFIGS = new HashMap<>(); public static final ClientConfig client = new ClientConfig(); public static final CommonConfig common = new CommonConfig(); public static final GeneralConfig general = new GeneralConfig(); @@ -18,14 +24,18 @@ private MekanismConfig() { public static final WorldConfig world = new WorldConfig(); public static void registerConfigs(ModContainer modContainer) { - MekanismConfigHelper.registerConfig(modContainer, client); - MekanismConfigHelper.registerConfig(modContainer, common); - MekanismConfigHelper.registerConfig(modContainer, general); - MekanismConfigHelper.registerConfig(modContainer, gear); - MekanismConfigHelper.registerConfig(modContainer, startup); - MekanismConfigHelper.registerConfig(modContainer, storage); - MekanismConfigHelper.registerConfig(modContainer, tiers); - MekanismConfigHelper.registerConfig(modContainer, usage); - MekanismConfigHelper.registerConfig(modContainer, world); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, client); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, common); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, general); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, gear); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, startup); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, storage); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, tiers); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, usage); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, world); + } + + public static void onConfigLoad(ModConfigEvent configEvent) { + MekanismConfigHelper.onConfigLoad(configEvent, Mekanism.MODID, KNOWN_CONFIGS); } } \ No newline at end of file diff --git a/src/main/java/mekanism/common/config/MekanismConfigHelper.java b/src/main/java/mekanism/common/config/MekanismConfigHelper.java index d5386ea415e..9ec3290f9cf 100644 --- a/src/main/java/mekanism/common/config/MekanismConfigHelper.java +++ b/src/main/java/mekanism/common/config/MekanismConfigHelper.java @@ -1,9 +1,12 @@ package mekanism.common.config; import java.nio.file.Path; +import java.util.Map; import mekanism.common.Mekanism; import net.neoforged.fml.ModContainer; -import net.neoforged.fml.config.ConfigTracker; +import net.neoforged.fml.config.IConfigSpec; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.event.config.ModConfigEvent; import net.neoforged.fml.loading.FMLPaths; public class MekanismConfigHelper { @@ -14,12 +17,23 @@ private MekanismConfigHelper() { public static final Path CONFIG_DIR = FMLPaths.getOrCreateGameRelativePath(FMLPaths.CONFIGDIR.get().resolve(Mekanism.MOD_NAME)); /** - * Creates a mod config so that {@link ConfigTracker} will track it and sync server configs from server to client. + * Creates and register a mod config, and track it so that we can properly clear cached values. */ - public static void registerConfig(ModContainer modContainer, IMekanismConfig config) { - MekanismModConfig modConfig = new MekanismModConfig(modContainer, config); - if (config.addToContainer()) { - modContainer.addConfig(modConfig); + public static void registerConfig(Map knownConfigs, ModContainer modContainer, IMekanismConfig config) { + modContainer.registerConfig(config.getConfigType(), config.getConfigSpec(), Mekanism.MOD_NAME + "/" + config.getFileName() + ".toml"); + knownConfigs.put(config.getConfigSpec(), config); + } + + public static void onConfigLoad(ModConfigEvent event, String modid, Map knownConfigs) { + //Note: We listen to both the initial load and the reload, to make sure that we fix any accidentally + // cached values from calls before the initial loading + ModConfig config = event.getConfig(); + //Make sure it is for the same modid as us + if (config.getModId().equals(modid)) { + IMekanismConfig mekanismConfig = knownConfigs.get(config.getSpec()); + if (mekanismConfig != null) { + mekanismConfig.clearCache(event instanceof ModConfigEvent.Unloading); + } } } } \ No newline at end of file diff --git a/src/main/java/mekanism/common/config/MekanismModConfig.java b/src/main/java/mekanism/common/config/MekanismModConfig.java deleted file mode 100644 index f54f8ddf100..00000000000 --- a/src/main/java/mekanism/common/config/MekanismModConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package mekanism.common.config; - -import mekanism.common.Mekanism; -import net.neoforged.fml.ModContainer; -import net.neoforged.fml.config.ModConfig; -import net.neoforged.fml.event.config.ModConfigEvent; - -/** - * Custom {@link ModConfig} implementation that makes invalidating custom caches easier. - */ -public class MekanismModConfig extends ModConfig { - - private final IMekanismConfig mekanismConfig; - - public MekanismModConfig(ModContainer container, IMekanismConfig config) { - super(config.getConfigType(), config.getConfigSpec(), container, Mekanism.MOD_NAME + "/" + config.getFileName() + ".toml"); - this.mekanismConfig = config; - } - - public void clearCache(ModConfigEvent event) { - mekanismConfig.clearCache(event instanceof ModConfigEvent.Unloading); - } -} \ No newline at end of file diff --git a/src/main/java/mekanism/common/config/StorageConfig.java b/src/main/java/mekanism/common/config/StorageConfig.java index a0c795ac68b..ec443dcaad2 100644 --- a/src/main/java/mekanism/common/config/StorageConfig.java +++ b/src/main/java/mekanism/common/config/StorageConfig.java @@ -140,9 +140,4 @@ public ModConfigSpec getConfigSpec() { public Type getConfigType() { return Type.SERVER; } - - @Override - public boolean addToContainer() { - return false; - } } \ No newline at end of file diff --git a/src/main/java/mekanism/common/config/TierConfig.java b/src/main/java/mekanism/common/config/TierConfig.java index 8ac1103033b..55d1daa9a8f 100644 --- a/src/main/java/mekanism/common/config/TierConfig.java +++ b/src/main/java/mekanism/common/config/TierConfig.java @@ -208,9 +208,4 @@ public ModConfigSpec getConfigSpec() { public Type getConfigType() { return Type.SERVER; } - - @Override - public boolean addToContainer() { - return false; - } } \ No newline at end of file diff --git a/src/main/java/mekanism/common/config/UsageConfig.java b/src/main/java/mekanism/common/config/UsageConfig.java index 0cad3226995..62618e8458f 100644 --- a/src/main/java/mekanism/common/config/UsageConfig.java +++ b/src/main/java/mekanism/common/config/UsageConfig.java @@ -139,9 +139,4 @@ public ModConfigSpec getConfigSpec() { public Type getConfigType() { return Type.SERVER; } - - @Override - public boolean addToContainer() { - return false; - } } \ No newline at end of file diff --git a/src/main/java/mekanism/common/config/WorldConfig.java b/src/main/java/mekanism/common/config/WorldConfig.java index c281a4c2ff4..1b34bfb3c83 100644 --- a/src/main/java/mekanism/common/config/WorldConfig.java +++ b/src/main/java/mekanism/common/config/WorldConfig.java @@ -59,11 +59,6 @@ public Type getConfigType() { return Type.SERVER; } - @Override - public boolean addToContainer() { - return false; - } - public OreVeinConfig getVeinConfig(OreVeinType oreVeinType) { return ores.get(oreVeinType.type()).veinConfigs.get(oreVeinType.index()); } @@ -126,7 +121,7 @@ private SaltConfig(IMekanismConfig config, ModConfigSpec.Builder builder, int pe this.maxRadius = CachedIntValue.wrap(config, builder.comment("Extended variability (spread) for the radius in a vein of salt.") .define("maxRadius", spread, o -> { if (o instanceof Integer value && value >= 1 && value <= 4) { - return value >= this.minRadius.get(); + return value >= this.minRadius.getOrDefault(); } return false; })); diff --git a/src/main/java/mekanism/common/entity/EntityRobit.java b/src/main/java/mekanism/common/entity/EntityRobit.java index abc0b79cf98..c6847264797 100644 --- a/src/main/java/mekanism/common/entity/EntityRobit.java +++ b/src/main/java/mekanism/common/entity/EntityRobit.java @@ -288,14 +288,14 @@ private FloatingLong getRoundedTravelEnergy() { } @Override - public void onRemovedFromWorld() { + public void onRemovedFromLevel() { if (level() != null && !level().isClientSide && getFollowing() && getOwner() != null) { //If this robit is currently following its owner and is being removed from the world (due to chunk unloading) // register a ticket that loads the chunk for a second, so that it has time to have its following check run again // (as it runs every 10 ticks, half a second), and then teleport to the owner. ((ServerLevel) level()).getChunkSource().addRegionTicket(ROBIT_CHUNK_UNLOAD, new ChunkPos(blockPosition()), 2, getId()); } - super.onRemovedFromWorld(); + super.onRemovedFromLevel(); } @Override diff --git a/src/main/java/mekanism/common/world/height/ConfigurableHeightRange.java b/src/main/java/mekanism/common/world/height/ConfigurableHeightRange.java index 79c1768c742..8175399bd1b 100644 --- a/src/main/java/mekanism/common/world/height/ConfigurableHeightRange.java +++ b/src/main/java/mekanism/common/world/height/ConfigurableHeightRange.java @@ -25,7 +25,7 @@ public static ConfigurableHeightRange create(IMekanismConfig config, ModConfigSp if (value == 0) { return true; } - return value > 0 && shape.get() == HeightShape.TRAPEZOID; + return value > 0 && shape.getOrDefault() == HeightShape.TRAPEZOID; } return false; })) diff --git a/src/main/java/mekanism/common/world/height/ConfigurableVerticalAnchor.java b/src/main/java/mekanism/common/world/height/ConfigurableVerticalAnchor.java index 1303183406e..5ca0474276f 100644 --- a/src/main/java/mekanism/common/world/height/ConfigurableVerticalAnchor.java +++ b/src/main/java/mekanism/common/world/height/ConfigurableVerticalAnchor.java @@ -1,7 +1,5 @@ package mekanism.common.world.height; -import java.util.function.IntSupplier; -import java.util.function.Supplier; import mekanism.common.config.IMekanismConfig; import mekanism.common.config.value.CachedEnumValue; import mekanism.common.config.value.CachedIntValue; @@ -11,7 +9,7 @@ import net.neoforged.neoforge.common.ModConfigSpec.ConfigValue; import org.jetbrains.annotations.Nullable; -public record ConfigurableVerticalAnchor(Supplier anchorType, IntSupplier value) { +public record ConfigurableVerticalAnchor(CachedEnumValue anchorType, CachedIntValue value) { public static ConfigurableVerticalAnchor create(IMekanismConfig config, ModConfigSpec.Builder builder, String path, String comment, OreAnchor defaultAnchor, @Nullable ConfigurableVerticalAnchor minAnchor) { @@ -27,7 +25,7 @@ public static ConfigurableVerticalAnchor create(IMekanismConfig config, ModConfi } else { value = valueBuilder.define("value", defaultAnchor.value(), o -> { if (o instanceof Integer v) { - return minAnchor.anchorType.get() != type.get() || v >= minAnchor.value.getAsInt(); + return minAnchor.anchorType.getOrDefault() != type.getOrDefault() || v >= minAnchor.value.getOrDefault(); } return false; }); diff --git a/src/tools/java/mekanism/tools/common/MekanismTools.java b/src/tools/java/mekanism/tools/common/MekanismTools.java index c07c077f86f..9ee8a02958a 100644 --- a/src/tools/java/mekanism/tools/common/MekanismTools.java +++ b/src/tools/java/mekanism/tools/common/MekanismTools.java @@ -2,7 +2,6 @@ import mekanism.common.Mekanism; import mekanism.common.base.IModModule; -import mekanism.common.config.MekanismModConfig; import mekanism.common.lib.Version; import mekanism.tools.common.config.MekanismToolsConfig; import mekanism.tools.common.registries.ToolsArmorMaterials; @@ -13,8 +12,6 @@ import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; import net.neoforged.fml.common.Mod; -import net.neoforged.fml.config.ModConfig; -import net.neoforged.fml.event.config.ModConfigEvent; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; import net.neoforged.neoforge.common.NeoForge; @@ -39,7 +36,7 @@ public MekanismTools(ModContainer modContainer, IEventBus modEventBus) { NeoForge.EVENT_BUS.addListener(MobEquipmentHelper::onLivingSpecialSpawn); modEventBus.addListener(this::commonSetup); - modEventBus.addListener(this::onConfigLoad); + modEventBus.addListener(MekanismToolsConfig::onConfigLoad); ToolsArmorMaterials.ARMOR_MATERIALS.register(modEventBus); ToolsItems.ITEMS.register(modEventBus); ToolsCreativeTabs.CREATIVE_TABS.register(modEventBus); @@ -50,16 +47,6 @@ public static ResourceLocation rl(String path) { return ResourceLocation.fromNamespaceAndPath(MekanismTools.MODID, path); } - private void onConfigLoad(ModConfigEvent configEvent) { - //Note: We listen to both the initial load and the reload, to make sure that we fix any accidentally - // cached values from calls before the initial loading - ModConfig config = configEvent.getConfig(); - //Make sure it is for the same modid as us - if (config.getModId().equals(MODID) && config instanceof MekanismModConfig mekConfig) { - mekConfig.clearCache(configEvent); - } - } - private void commonSetup(FMLCommonSetupEvent event) { Mekanism.logger.info("Loaded 'Mekanism: Tools' module."); } diff --git a/src/tools/java/mekanism/tools/common/config/MekanismToolsConfig.java b/src/tools/java/mekanism/tools/common/config/MekanismToolsConfig.java index 0f1fa845188..f471ab6977f 100644 --- a/src/tools/java/mekanism/tools/common/config/MekanismToolsConfig.java +++ b/src/tools/java/mekanism/tools/common/config/MekanismToolsConfig.java @@ -1,20 +1,31 @@ package mekanism.tools.common.config; +import java.util.HashMap; +import java.util.Map; +import mekanism.common.config.IMekanismConfig; import mekanism.common.config.MekanismConfigHelper; +import mekanism.tools.common.MekanismTools; import net.neoforged.fml.ModContainer; +import net.neoforged.fml.config.IConfigSpec; +import net.neoforged.fml.event.config.ModConfigEvent; public class MekanismToolsConfig { private MekanismToolsConfig() { } + private static final Map KNOWN_CONFIGS = new HashMap<>(); public static final ToolsConfig tools = new ToolsConfig(); public static final ToolsMaterialConfig materials = new ToolsMaterialConfig(); public static final ToolsClientConfig toolsClient = new ToolsClientConfig(); public static void registerConfigs(ModContainer modContainer) { - MekanismConfigHelper.registerConfig(modContainer, tools); - MekanismConfigHelper.registerConfig(modContainer, materials); - MekanismConfigHelper.registerConfig(modContainer, toolsClient); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, tools); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, materials); + MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, toolsClient); + } + + public static void onConfigLoad(ModConfigEvent configEvent) { + MekanismConfigHelper.onConfigLoad(configEvent, MekanismTools.MODID, KNOWN_CONFIGS); } } \ No newline at end of file diff --git a/src/tools/java/mekanism/tools/common/material/MaterialCreator.java b/src/tools/java/mekanism/tools/common/material/MaterialCreator.java index 1782af090e8..450eca81ffb 100644 --- a/src/tools/java/mekanism/tools/common/material/MaterialCreator.java +++ b/src/tools/java/mekanism/tools/common/material/MaterialCreator.java @@ -71,7 +71,7 @@ public MaterialCreator(IMekanismConfig config, ModConfigSpec.Builder builder, Ba } else { actualValue = (float) val; } - float baseDamage = attackDamage.get(); + float baseDamage = attackDamage.getOrDefault(); return actualValue >= -baseDamage && actualValue <= Float.MAX_VALUE - baseDamage; } return false;