Skip to content

Commit 1c665f2

Browse files
committed
fix: Don't rely on other registries when registries are being read
1 parent 9884123 commit 1c665f2

8 files changed

Lines changed: 37 additions & 160 deletions

File tree

fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabric.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,29 @@
11
package mod.bluestaggo.modernerbeta.fabric;
22

3+
import com.mojang.serialization.Codec;
34
import mod.bluestaggo.modernerbeta.ModernerBeta;
45
import mod.bluestaggo.modernerbeta.command.DebugProviderSettingsCommand;
56
import mod.bluestaggo.modernerbeta.compat.ModCompat;
67
import mod.bluestaggo.modernerbeta.fabric.network.NetworkHelperImpl;
7-
import mod.bluestaggo.modernerbeta.fabric.registry.DynamicRegistryHelper;
88
import mod.bluestaggo.modernerbeta.fabric.registry.RegistryHelperImpl;
99
import mod.bluestaggo.modernerbeta.registry.ModernBetaRegistries;
1010
import mod.bluestaggo.modernerbeta.level.ModernBetaLevelInitializer;
1111
import net.fabricmc.api.ModInitializer;
1212
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
1313
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
1414
//? if >=1.20.2 {
15+
import net.fabricmc.fabric.api.event.registry.DynamicRegistries;
1516
import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
1617
import mod.bluestaggo.modernerbeta.network.BiomeProviderInfoPayload;
1718
//?}
1819
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
1920
import net.fabricmc.fabric.api.resource.ResourcePackActivationType;
2021
import net.fabricmc.loader.api.FabricLoader;
2122
import net.fabricmc.loader.api.ModContainer;
23+
import net.minecraft.core.Registry;
2224
import net.minecraft.network.chat.Component;
25+
import net.minecraft.resources.ResourceKey;
26+
import net.minecraft.util.Tuple;
2327

2428
public class ModernerBetaFabric implements ModInitializer {
2529
@Override
@@ -42,8 +46,8 @@ public void onInitialize() {
4246
ModernerBeta.loadConfig(FabricLoader.getInstance().getConfigDir());
4347

4448
ModernerBeta.setupCustomDynamicRegistries();
45-
for (ModernerBeta.CustomDynamicRegistry<?> dynamicRegistry : ModernerBeta.CUSTOM_DYNAMIC_REGISTRIES) {
46-
DynamicRegistryHelper.register(dynamicRegistry);
49+
for (Tuple<ResourceKey<?>, Codec<?>> dynamicRegistry : ModernerBeta.CUSTOM_DYNAMIC_REGISTRIES) {
50+
DynamicRegistries.register((ResourceKey<Registry<Object>>)dynamicRegistry.getA(), (Codec<Object>)dynamicRegistry.getB());
4751
}
4852

4953
if (FabricLoader.getInstance().isDevelopmentEnvironment()) {

fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/mixin/DynamicRegistriesImplAccessor.java

Lines changed: 0 additions & 17 deletions
This file was deleted.

fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/registry/DynamicRegistryHelper.java

Lines changed: 0 additions & 56 deletions
This file was deleted.

forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsCommon.java

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.mojang.serialization.Codec;
44
import mod.bluestaggo.modernerbeta.ModernerBeta;
55
import mod.bluestaggo.modernerbeta.compat.ModCompat;
6-
import mod.bluestaggo.modernerbeta.forgelike.mixin.DataPackRegistriesHooksAccessor;
76
import mod.bluestaggo.modernerbeta.forgelike.network.NetworkHelperImpl;
87
import mod.bluestaggo.modernerbeta.forgelike.registry.RegistryHelperImpl;
98
import mod.bluestaggo.modernerbeta.network.BiomeProviderInfoPayload;
@@ -19,6 +18,7 @@
1918
import net.minecraft.server.packs.repository.PackSource;
2019
//? if neoforge {
2120
import mod.bluestaggo.modernerbeta.registry.VanillaRegistryHandler;
21+
import net.minecraft.util.Tuple;
2222
import net.neoforged.bus.api.SubscribeEvent;
2323
import net.neoforged.fml.common.EventBusSubscriber;
2424
import net.neoforged.fml.event.lifecycle.FMLConstructModEvent;
@@ -29,14 +29,12 @@
2929
import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
3030
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
3131
import net.neoforged.neoforge.registries.DataPackRegistryEvent;
32-
import net.neoforged.neoforge.registries.ModifyRegistriesEvent;
3332
import net.neoforged.neoforge.registries.NewRegistryEvent;
3433
import net.neoforged.neoforge.registries.RegisterEvent;
3534
//?} else {
3635
/*import mod.bluestaggo.modernerbeta.forgelike.registry.ForgeRegistryHandler;
3736
import net.minecraft.server.packs.PathPackResources;
3837
import net.minecraftforge.api.distmarker.Dist;
39-
import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent;
4038
import net.minecraftforge.common.util.LogicalSidedProvider;
4139
import net.minecraftforge.event.AddPackFindersEvent;
4240
import net.minecraftforge.eventbus.api.SubscribeEvent;
@@ -137,41 +135,8 @@ public static void registerRegistries(NewRegistryEvent event) {
137135
@SuppressWarnings("unchecked")
138136
public static void registerDatapackRegistries(DataPackRegistryEvent.NewRegistry event) {
139137
ModernerBeta.setupCustomDynamicRegistries();
140-
for (ModernerBeta.CustomDynamicRegistry<?> dynamicRegistry : ModernerBeta.CUSTOM_DYNAMIC_REGISTRIES) {
141-
event.dataPackRegistry((ResourceKey<Registry<Object>>) dynamicRegistry.key(), (Codec<Object>) dynamicRegistry.codec());
142-
}
143-
}
144-
145-
@SubscribeEvent
146-
public static void modifyRegistries(
147-
//? if neoforge {
148-
ModifyRegistriesEvent
149-
//? } else {
150-
/*RegisterCapabilitiesEvent
151-
*///? }
152-
event) {
153-
//HACK: we're modifying the datapack registries with an event that is called
154-
// after DataPackRegistryEvent.NewRegistry is processed. this event we're using does not allow for
155-
// modifying datapack registries, but we do it anyway.
156-
var dataPackRegistries = DataPackRegistriesHooksAccessor.getDataPackRegistries();
157-
158-
for (ModernerBeta.CustomDynamicRegistry<?> dynamicRegistry : ModernerBeta.CUSTOM_DYNAMIC_REGISTRIES) {
159-
if (dynamicRegistry.insertAfter() == null)
160-
continue;
161-
162-
var registryData = dataPackRegistries.stream()
163-
.filter(data -> data.key() == dynamicRegistry.key())
164-
.findFirst()
165-
.orElseThrow();
166-
dataPackRegistries.remove(registryData);
167-
168-
int index = dataPackRegistries.stream()
169-
.filter(data -> data.key() == dynamicRegistry.insertAfter())
170-
.map(dataPackRegistries::indexOf)
171-
.findFirst()
172-
.orElseThrow();
173-
174-
dataPackRegistries.add(index + 1, registryData);
138+
for (Tuple<ResourceKey<?>, Codec<?>> dynamicRegistry : ModernerBeta.CUSTOM_DYNAMIC_REGISTRIES) {
139+
event.dataPackRegistry((ResourceKey<Registry<Object>>)dynamicRegistry.getA(), (Codec<Object>)dynamicRegistry.getB());
175140
}
176141
}
177142

forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/mixin/DataPackRegistriesHooksAccessor.java

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/main/java/mod/bluestaggo/modernerbeta/ModernerBeta.java

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import mod.bluestaggo.modernerbeta.level.structure.ModernBetaStructureTypes;
3131
import net.minecraft.core.Registry;
3232
import net.minecraft.core.registries.BuiltInRegistries;
33-
import net.minecraft.core.registries.Registries;
3433
import net.minecraft.resources.ResourceKey;
3534
import net.minecraft.resources.ResourceLocation;
3635
import net.minecraft.util.Tuple;
@@ -74,7 +73,7 @@ public class ModernerBeta {
7473
);
7574

7675
public static List<Tuple<Registry<?>, Consumer<IRegistryHandler<?>>>> CUSTOM_REGISTRY_HANDLERS;
77-
public static List<CustomDynamicRegistry<?>> CUSTOM_DYNAMIC_REGISTRIES;
76+
public static List<Tuple<ResourceKey<?>, Codec<?>>> CUSTOM_DYNAMIC_REGISTRIES;
7877
public static INetworkHelper networkHelper;
7978
public static ModernBetaSettings config;
8079

@@ -95,21 +94,11 @@ public static void setupCustomRegistryHandlers() {
9594
);
9695
}
9796

98-
public record CustomDynamicRegistry<T>(
99-
ResourceKey<? extends Registry<T>> key,
100-
ResourceKey<? extends Registry<?>> insertAfter,
101-
Codec<T> codec
102-
) {
103-
public CustomDynamicRegistry(ResourceKey<? extends Registry<T>> key, Codec<T> codec) {
104-
this(key, null, codec);
105-
}
106-
}
107-
10897
public static void setupCustomDynamicRegistries() {
10998
CUSTOM_DYNAMIC_REGISTRIES = List.of(
110-
new CustomDynamicRegistry<>(ModernBetaResourceKeys.SETTINGS_PRESET, Registries.NOISE_SETTINGS, ModernBetaSettingsPreset.CODEC),
111-
new CustomDynamicRegistry<>(ModernBetaResourceKeys.SETTINGS_PRESET_CATEGORY, ModernBetaSettingsPresetCategory.CODEC),
112-
new CustomDynamicRegistry<>(ModernBetaResourceKeys.SURFACE_CONFIG, SurfaceConfig.CODEC)
99+
new Tuple<>(ModernBetaResourceKeys.SETTINGS_PRESET, ModernBetaSettingsPreset.CODEC),
100+
new Tuple<>(ModernBetaResourceKeys.SETTINGS_PRESET_CATEGORY, ModernBetaSettingsPresetCategory.CODEC),
101+
new Tuple<>(ModernBetaResourceKeys.SURFACE_CONFIG, SurfaceConfig.CODEC)
113102
);
114103
}
115104

src/main/java/mod/bluestaggo/modernerbeta/level/chunk/ModernBetaChunkGenerator.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import mod.bluestaggo.modernerbeta.ModernerBeta;
66
import mod.bluestaggo.modernerbeta.api.level.chunk.surface.SurfaceConfig;
77
import mod.bluestaggo.modernerbeta.compat.ModCompat;
8+
import mod.bluestaggo.modernerbeta.mixin.NoiseBasedChunkGeneratorAccessor;
89
import mod.bluestaggo.modernerbeta.registry.ModernBetaRegistries;
910
import mod.bluestaggo.modernerbeta.api.level.chunk.ChunkProvider;
1011
import mod.bluestaggo.modernerbeta.registry.IRegistryHandler;
@@ -80,13 +81,14 @@ public class ModernBetaChunkGenerator extends NoiseBasedChunkGenerator {
8081

8182
private ChunkProvider chunkProvider;
8283

84+
@SuppressWarnings("DataFlowIssue")
8385
public ModernBetaChunkGenerator(
8486
BiomeSource biomeSource,
8587
HolderGetter<ModernBetaSettingsPreset> presetRegistry,
8688
HolderGetter<SurfaceConfig> surfaceConfigRegistry,
8789
ModernBetaSettings chunkProviderSettings
8890
) {
89-
super(biomeSource, generatorSettings(presetRegistry, fixupPreset(chunkProviderSettings)));
91+
super(biomeSource, null);
9092

9193
this.presetRegistry = presetRegistry;
9294
this.surfaceConfigRegistry = surfaceConfigRegistry;
@@ -114,16 +116,11 @@ private static ModernBetaSettings fixupPreset(ModernBetaSettings chunkProviderSe
114116
return chunkProviderSettings;
115117
}
116118

119+
private static Holder<NoiseGeneratorSettings> generatorSettings(ModernBetaSettings chunkSettings) {
120+
Holder<NoiseGeneratorSettings> generatorSettings = chunkSettings.getOrDefault(SettingsComponentTypes.NOISE_GENERATOR_SETTINGS);
117121

118-
private static Holder<NoiseGeneratorSettings> generatorSettings(
119-
HolderGetter<ModernBetaSettingsPreset> presetRegistry,
120-
ModernBetaSettings chunkSettings
121-
) {
122-
ModernBetaSettings mappedChunkSettings = chunkSettings.mapPreset(presetRegistry, ModernBetaSettingsPreset::chunkSettings);
123-
Holder<NoiseGeneratorSettings> generatorSettings = mappedChunkSettings.getOrDefault(SettingsComponentTypes.NOISE_GENERATOR_SETTINGS);
124-
125-
NoiseSettings noiseSettings = mappedChunkSettings.get(SettingsComponentTypes.NOISE_SETTINGS);
126-
Integer seaLevel = mappedChunkSettings.get(SettingsComponentTypes.SEA_LEVEL);
122+
NoiseSettings noiseSettings = chunkSettings.get(SettingsComponentTypes.NOISE_SETTINGS);
123+
Integer seaLevel = chunkSettings.get(SettingsComponentTypes.SEA_LEVEL);
127124
if (noiseSettings == null & seaLevel == null)
128125
return generatorSettings;
129126

@@ -150,6 +147,7 @@ private static Holder<NoiseGeneratorSettings> generatorSettings(
150147

151148
public void initProvider(long seed) {
152149
ModernBetaSettings chunkSettings = this.chunkSettings.mapPreset(this.presetRegistry, ModernBetaSettingsPreset::chunkSettings);
150+
((NoiseBasedChunkGeneratorAccessor) this).setSettings(generatorSettings(chunkSettings));
153151

154152
this.chunkProvider = ModernBetaRegistries.CHUNK
155153
//? if >=1.21.2 {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package mod.bluestaggo.modernerbeta.mixin;
2+
3+
import net.minecraft.core.Holder;
4+
import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator;
5+
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.Mutable;
8+
import org.spongepowered.asm.mixin.gen.Accessor;
9+
10+
@Mixin(NoiseBasedChunkGenerator.class)
11+
public interface NoiseBasedChunkGeneratorAccessor {
12+
@Mutable
13+
@Accessor("settings")
14+
void setSettings(Holder<NoiseGeneratorSettings> settings);
15+
}

0 commit comments

Comments
 (0)