Skip to content

Commit 710f051

Browse files
committed
Bump min neo version to 21.0.86-beta and adjust for changes to config system internals
1 parent 23b7a68 commit 710f051

28 files changed

+152
-178
lines changed

build.gradle

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,10 @@ dependencies {
376376
localRuntime(emi)
377377
} else {
378378
//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
379-
datagenMainRuntimeOnly(emi)
379+
//TODO - 1.21: Make a PR to EMI to bootstrap in datagen, and more importantly be able to somehow provide the registry access context
380+
// rather than it trying to grab it from Minecraft.getInstance().level as Minecraft.getInstance() is null in datagen
381+
// As https://github.com/emilyploszaj/emi/pull/600 broke it
382+
//datagenMainRuntimeOnly(emi)
380383
}
381384

382385
//TODO: Re-enable once it doesn't cause Datagen to fail

gradle.properties

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ minecraft_version=1.21
99
previous_minecraft_version=1.20.4
1010
previous_minor_minecraft_version=1.20.6
1111
loader_version_range=[4,)
12-
forge_version=21.0.78-beta
12+
forge_version=21.0.86-beta
1313
mod_version=10.6.4
1414
#This determines the minimum version of forge required to use Mekanism
1515
# Only bump it whenever we need access to a feature in forge that is not available in earlier versions
16-
forge_version_range=[21.0.58-beta,)
16+
forge_version_range=[21.0.86-beta,)
1717
minecraft_version_range=[1.21]
1818
#This specifies what type of release it will be uploaded to CurseForge and Modrinth as
1919
# options are: alpha, beta, release
@@ -37,14 +37,14 @@ yamlops_version=1.2.0
3737

3838
#Mod dependencies
3939
cc_tweaked_version=1.111.0
40-
crafttweaker_version=20.0.15
40+
crafttweaker_version=20.0.17
4141
ctm_version=1.2.0+1
4242
curios_version=9.0.4+1.21
4343
emi_version=1.1.10
4444
grand_power_version=3.0.0
4545
jade_api_id=5427895
4646
jade_id=5493270
47-
jei_version=19.1.1.19
47+
jei_version=19.5.0.30
4848
json_things_version=0.12.0
4949
top_version=1.21_neo-12.0.0-1
5050
wthit_version=12.2.2

src/additions/java/mekanism/additions/common/MekanismAdditions.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import mekanism.additions.common.voice.VoiceServerManager;
1717
import mekanism.common.Mekanism;
1818
import mekanism.common.base.IModModule;
19-
import mekanism.common.config.MekanismModConfig;
2019
import mekanism.common.lib.Version;
2120
import mekanism.common.registration.impl.ItemRegistryObject;
2221
import net.minecraft.core.BlockPos;
@@ -32,8 +31,6 @@
3231
import net.neoforged.bus.api.IEventBus;
3332
import net.neoforged.fml.ModContainer;
3433
import net.neoforged.fml.common.Mod;
35-
import net.neoforged.fml.config.ModConfig;
36-
import net.neoforged.fml.event.config.ModConfigEvent;
3734
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
3835
import net.neoforged.neoforge.common.NeoForge;
3936
import net.neoforged.neoforge.event.server.ServerStartingEvent;
@@ -67,7 +64,7 @@ public MekanismAdditions(ModContainer modContainer, IEventBus modEventBus) {
6764
NeoForge.EVENT_BUS.addListener(this::serverStopping);
6865

6966
modEventBus.addListener(this::commonSetup);
70-
modEventBus.addListener(this::onConfigLoad);
67+
modEventBus.addListener(MekanismAdditionsConfig::onConfigLoad);
7168
AdditionsDataComponents.DATA_COMPONENTS.register(modEventBus);
7269
AdditionsItems.ITEMS.register(modEventBus);
7370
AdditionsBlocks.BLOCKS.register(modEventBus);
@@ -158,12 +155,4 @@ private void serverStopping(ServerStoppingEvent event) {
158155
voiceManager = null;
159156
}
160157
}
161-
162-
private void onConfigLoad(ModConfigEvent configEvent) {
163-
ModConfig config = configEvent.getConfig();
164-
//Make sure it is for the same modid as us
165-
if (config.getModId().equals(MODID) && config instanceof MekanismModConfig mekConfig) {
166-
mekConfig.clearCache(configEvent);
167-
}
168-
}
169158
}
Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,29 @@
11
package mekanism.additions.common.config;
22

3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import mekanism.additions.common.MekanismAdditions;
6+
import mekanism.common.config.IMekanismConfig;
37
import mekanism.common.config.MekanismConfigHelper;
48
import net.neoforged.fml.ModContainer;
9+
import net.neoforged.fml.config.IConfigSpec;
10+
import net.neoforged.fml.event.config.ModConfigEvent;
511

612
public class MekanismAdditionsConfig {
713

814
private MekanismAdditionsConfig() {
915
}
1016

17+
private static final Map<IConfigSpec, IMekanismConfig> KNOWN_CONFIGS = new HashMap<>();
1118
public static final AdditionsConfig additions = new AdditionsConfig();
1219
public static final AdditionsClientConfig client = new AdditionsClientConfig();
1320

1421
public static void registerConfigs(ModContainer modContainer) {
15-
MekanismConfigHelper.registerConfig(modContainer, client);
16-
MekanismConfigHelper.registerConfig(modContainer, additions);
22+
MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, client);
23+
MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, additions);
24+
}
25+
26+
public static void onConfigLoad(ModConfigEvent configEvent) {
27+
MekanismConfigHelper.onConfigLoad(configEvent, MekanismAdditions.MODID, KNOWN_CONFIGS);
1728
}
1829
}

src/datagen/main/java/mekanism/common/MekanismDataGenerator.java

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
package mekanism.common;
22

33
import com.electronwill.nightconfig.core.CommentedConfig;
4+
import com.electronwill.nightconfig.core.InMemoryCommentedFormat;
5+
import com.electronwill.nightconfig.core.concurrent.SynchronizedConfig;
46
import com.google.common.hash.Hashing;
57
import com.google.common.hash.HashingOutputStream;
68
import com.google.gson.JsonElement;
79
import java.io.ByteArrayOutputStream;
810
import java.io.IOException;
911
import java.io.OutputStream;
12+
import java.lang.reflect.Constructor;
13+
import java.lang.reflect.Method;
1014
import java.nio.file.Path;
15+
import java.util.EnumMap;
16+
import java.util.LinkedHashMap;
1117
import java.util.Set;
1218
import java.util.concurrent.CompletableFuture;
19+
import java.util.function.Function;
1320
import mekanism.client.lang.MekanismLangProvider;
1421
import mekanism.client.model.MekanismItemModelProvider;
1522
import mekanism.client.sound.MekanismSoundProvider;
@@ -18,6 +25,7 @@
1825
import mekanism.client.texture.PrideRobitTextureProvider;
1926
import mekanism.common.advancements.MekanismAdvancementProvider;
2027
import mekanism.common.integration.computer.ComputerHelpProvider;
28+
import mekanism.common.lib.FieldReflectionHelper;
2129
import mekanism.common.loot.MekanismLootProvider;
2230
import mekanism.common.recipe.impl.MekanismRecipeProvider;
2331
import mekanism.common.registries.MekanismDatapackRegistryProvider;
@@ -32,12 +40,32 @@
3240
import net.neoforged.fml.common.EventBusSubscriber;
3341
import net.neoforged.fml.config.ConfigTracker;
3442
import net.neoforged.fml.config.ModConfig;
43+
import net.neoforged.fml.event.config.ModConfigEvent;
44+
import net.neoforged.fml.util.ObfuscationReflectionHelper;
3545
import net.neoforged.neoforge.common.data.ExistingFileHelper;
3646
import net.neoforged.neoforge.data.event.GatherDataEvent;
3747

3848
@EventBusSubscriber(modid = Mekanism.MODID, bus = EventBusSubscriber.Bus.MOD)
3949
public class MekanismDataGenerator {
4050

51+
@SuppressWarnings("UnstableApiUsage")
52+
private static final FieldReflectionHelper<ConfigTracker, EnumMap<ModConfig.Type, Set<ModConfig>>> CONFIG_SETS =
53+
new FieldReflectionHelper<>(ConfigTracker.class, "configSets", () -> new EnumMap<>(ModConfig.Type.class));
54+
private static final Constructor<?> LOADED_CONFIG;
55+
private static final Method SET_CONFIG;
56+
57+
static {
58+
Class<?> loadedConfig;
59+
try {
60+
loadedConfig = Class.forName("net.neoforged.fml.config.LoadedConfig");
61+
} catch (ClassNotFoundException e) {
62+
throw new RuntimeException(e);
63+
}
64+
LOADED_CONFIG = ObfuscationReflectionHelper.findConstructor(loadedConfig, CommentedConfig.class, Path.class, ModConfig.class);
65+
SET_CONFIG = ObfuscationReflectionHelper.findMethod(ModConfig.class, "setConfig", loadedConfig, Function.class);
66+
}
67+
68+
4169
private MekanismDataGenerator() {
4270
}
4371

@@ -75,17 +103,23 @@ public static void gatherData(GatherDataEvent event) {
75103
* 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
76104
* fake tiles.
77105
*/
106+
@SuppressWarnings("UnstableApiUsage")
78107
public static void bootstrapConfigs(String modid) {
79-
for (Set<ModConfig> configs : ConfigTracker.INSTANCE.configSets().values()) {
108+
for (Set<ModConfig> configs : CONFIG_SETS.getValue(ConfigTracker.INSTANCE).values()) {
80109
for (ModConfig config : configs) {
81110
if (config.getModId().equals(modid)) {
82111
//Similar to how ConfigTracker#loadDefaultServerConfigs works for loading default server configs on the client
83112
// except we don't bother firing an event as it is private, and we are already at defaults if we had called earlier,
84113
// 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
85114
// to reflect into package private methods
86-
CommentedConfig commentedConfig = CommentedConfig.inMemory();
115+
CommentedConfig commentedConfig = new SynchronizedConfig(InMemoryCommentedFormat.defaultInstance(), LinkedHashMap::new);
87116
config.getSpec().correct(commentedConfig);
88-
config.getSpec().acceptConfig(commentedConfig);
117+
try {
118+
SET_CONFIG.invoke(config, LOADED_CONFIG.newInstance(commentedConfig, null, config),
119+
(Function<ModConfig, ModConfigEvent>) ModConfigEvent.Loading::new);
120+
} catch (Throwable e) {
121+
throw new RuntimeException(e);
122+
}
89123
}
90124
}
91125
}

src/defense/java/mekanism/defense/common/MekanismDefense.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import mekanism.common.Mekanism;
44
import mekanism.common.base.IModModule;
5-
import mekanism.common.config.MekanismModConfig;
65
import mekanism.common.lib.Version;
76
import mekanism.defense.common.config.MekanismDefenseConfig;
87
import mekanism.defense.common.registries.DefenseBlocks;
@@ -14,8 +13,6 @@
1413
import net.neoforged.bus.api.IEventBus;
1514
import net.neoforged.fml.ModContainer;
1615
import net.neoforged.fml.common.Mod;
17-
import net.neoforged.fml.config.ModConfig;
18-
import net.neoforged.fml.event.config.ModConfigEvent;
1916
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
2017
import net.neoforged.neoforge.common.NeoForge;
2118
import net.neoforged.neoforge.event.server.ServerStoppedEvent;
@@ -40,7 +37,7 @@ public MekanismDefense(ModContainer modContainer, IEventBus modEventBus) {
4037
NeoForge.EVENT_BUS.addListener(this::serverStopped);
4138

4239
modEventBus.addListener(this::commonSetup);
43-
modEventBus.addListener(this::onConfigLoad);
40+
modEventBus.addListener(MekanismDefenseConfig::onConfigLoad);
4441
DefenseItems.ITEMS.register(modEventBus);
4542
DefenseBlocks.BLOCKS.register(modEventBus);
4643
DefenseCreativeTabs.CREATIVE_TABS.register(modEventBus);
@@ -73,14 +70,4 @@ public String getName() {
7370
@Override
7471
public void resetClient() {
7572
}
76-
77-
private void onConfigLoad(ModConfigEvent configEvent) {
78-
//Note: We listen to both the initial load and the reload, to make sure that we fix any accidentally
79-
// cached values from calls before the initial loading
80-
ModConfig config = configEvent.getConfig();
81-
//Make sure it is for the same modid as us
82-
if (config.getModId().equals(MODID) && config instanceof MekanismModConfig mekConfig) {
83-
mekConfig.clearCache(configEvent);
84-
}
85-
}
8673
}
Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
package mekanism.defense.common.config;
22

3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import mekanism.common.config.IMekanismConfig;
36
import mekanism.common.config.MekanismConfigHelper;
7+
import mekanism.defense.common.MekanismDefense;
48
import net.neoforged.fml.ModContainer;
9+
import net.neoforged.fml.config.IConfigSpec;
10+
import net.neoforged.fml.event.config.ModConfigEvent;
511

612
public class MekanismDefenseConfig {
713

814
private MekanismDefenseConfig() {
915
}
1016

17+
private static final Map<IConfigSpec, IMekanismConfig> KNOWN_CONFIGS = new HashMap<>();
1118
public static final DefenseConfig defense = new DefenseConfig();
1219

1320
public static void registerConfigs(ModContainer modContainer) {
14-
MekanismConfigHelper.registerConfig(modContainer, defense);
21+
MekanismConfigHelper.registerConfig(KNOWN_CONFIGS, modContainer, defense);
22+
}
23+
24+
public static void onConfigLoad(ModConfigEvent configEvent) {
25+
MekanismConfigHelper.onConfigLoad(configEvent, MekanismDefense.MODID, KNOWN_CONFIGS);
1526
}
1627
}

src/generators/java/mekanism/generators/common/MekanismGenerators.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import mekanism.common.base.IModModule;
88
import mekanism.common.command.builders.BuildCommand;
99
import mekanism.common.config.MekanismConfig;
10-
import mekanism.common.config.MekanismModConfig;
1110
import mekanism.common.config.listener.ConfigBasedCachedFLSupplier;
1211
import mekanism.common.lib.Version;
1312
import mekanism.common.lib.multiblock.MultiblockManager;
@@ -41,8 +40,6 @@
4140
import net.neoforged.bus.api.IEventBus;
4241
import net.neoforged.fml.ModContainer;
4342
import net.neoforged.fml.common.Mod;
44-
import net.neoforged.fml.config.ModConfig;
45-
import net.neoforged.fml.event.config.ModConfigEvent;
4643
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
4744
import net.neoforged.fml.event.lifecycle.InterModEnqueueEvent;
4845

@@ -77,7 +74,7 @@ public MekanismGenerators(ModContainer modContainer, IEventBus modEventBus) {
7774
versionNumber = new Version(modContainer);
7875
MekanismGeneratorsConfig.registerConfigs(modContainer);
7976
modEventBus.addListener(this::commonSetup);
80-
modEventBus.addListener(this::onConfigLoad);
77+
modEventBus.addListener(MekanismGeneratorsConfig::onConfigLoad);
8178
modEventBus.addListener(this::imcQueue);
8279

8380
GeneratorsDataComponents.DATA_COMPONENTS.register(modEventBus);
@@ -138,14 +135,4 @@ public String getName() {
138135
public void resetClient() {
139136
TurbineMultiblockData.clientRotationMap.clear();
140137
}
141-
142-
private void onConfigLoad(ModConfigEvent configEvent) {
143-
//Note: We listen to both the initial load and the reload, to make sure that we fix any accidentally
144-
// cached values from calls before the initial loading
145-
ModConfig config = configEvent.getConfig();
146-
//Make sure it is for the same modid as us
147-
if (config.getModId().equals(MODID) && config instanceof MekanismModConfig mekConfig) {
148-
mekConfig.clearCache(configEvent);
149-
}
150-
}
151138
}

src/generators/java/mekanism/generators/common/config/GeneratorsConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public class GeneratorsConfig extends BaseMekanismConfig {
115115
heatTankCapacity = CachedIntValue.wrap(this, builder.comment("The capacity in mB of the fluid tank in the Heat Generator.")
116116
.defineInRange("tankCapacity", 24 * FluidType.BUCKET_VOLUME, 1, Integer.MAX_VALUE));
117117
heatGenerationFluidRate = CachedIntValue.wrap(this, builder.comment("The amount of lava in mB that gets consumed to transfer heatGeneration Joules to the Heat Generator.")
118-
.define("heatGenerationFluidRate", 10, value -> value instanceof Integer i && i > 0 && i <= heatTankCapacity.get()));
118+
.define("heatGenerationFluidRate", 10, value -> value instanceof Integer i && i > 0 && i <= heatTankCapacity.getOrDefault()));
119119
builder.pop();
120120

121121
builder.comment("Gas-Burning Generator Settings").push(GAS_CATEGORY);
@@ -155,7 +155,7 @@ public class GeneratorsConfig extends BaseMekanismConfig {
155155
//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
156156
// as it is just used for range clamping
157157
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.")
158-
.define("maxY", DimensionType.MAX_Y, value -> value instanceof Integer && (Integer) value > windGenerationMinY.get()));
158+
.define("maxY", DimensionType.MAX_Y, value -> value instanceof Integer && (Integer) value > windGenerationMinY.getOrDefault()));
159159
//Note: We cannot verify the dimension exists as dimensions are dynamic so may not actually exist when we are validating
160160
windGenerationDimBlacklist = CachedResourceLocationListValue.define(this, builder.comment("The list of dimension ids that the Wind Generator will not generate power in."),
161161
"windGenerationDimBlacklist", ConstantPredicates.alwaysTrue());

src/generators/java/mekanism/generators/common/config/GeneratorsGearConfig.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,4 @@ public ModConfigSpec getConfigSpec() {
4848
public Type getConfigType() {
4949
return Type.SERVER;
5050
}
51-
52-
@Override
53-
public boolean addToContainer() {
54-
return false;
55-
}
5651
}

0 commit comments

Comments
 (0)