Change Surface Rules later to catch Biomes added by FAPI

This commit is contained in:
Frank 2022-06-22 00:54:15 +02:00
parent fc280cac4c
commit e1883409fa
4 changed files with 46 additions and 2 deletions

View file

@ -133,6 +133,12 @@ public class BCLWorldPresetSettings extends WorldPresetSettings {
return biomeSource;
}
@Override
public void injectSurfaceRules(RegistryAccess registryAccess, WorldGenSettings settings) {
//END and NETHER are handled in #repairSettingsOnLoad
SurfaceRuleUtil.injectSurfaceRules(settings, SurfaceRuleRegistry.NON_MANAGED_DIMENSIONS);
}
private static Holder<NoiseGeneratorSettings> injectSurfaceRules(
Holder<NoiseGeneratorSettings> reference,
Holder<NoiseGeneratorSettings> settings,
@ -236,7 +242,6 @@ public class BCLWorldPresetSettings extends WorldPresetSettings {
public WorldGenSettings repairSettingsOnLoad(RegistryAccess registryAccess, WorldGenSettings settings) {
settings = fixSettingsInCurrentWorld(registryAccess, LevelStem.NETHER, BuiltinDimensionTypes.NETHER, settings);
settings = fixSettingsInCurrentWorld(registryAccess, LevelStem.END, BuiltinDimensionTypes.END, settings);
SurfaceRuleUtil.injectSurfaceRules(settings, SurfaceRuleRegistry.NON_MANAGED_DIMENSIONS);
return settings;
}

View file

@ -0,0 +1,34 @@
package org.betterx.worlds.together.mixin.common;
import org.betterx.worlds.together.world.WorldGenUtil;
import net.minecraft.core.RegistryAccess;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.progress.ChunkProgressListener;
import net.minecraft.world.level.storage.WorldData;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
/**
* We need a hook here to alter surface rules after Fabric did add its biomes
* in {@link net.fabricmc.fabric.mixin.biome.MixinMinecraftServer}
*/
@Mixin(value = MinecraftServer.class, priority = 500)
public class MinecraftServerMixin {
@Shadow
@Final
private RegistryAccess.Frozen registryHolder;
@Shadow
@Final
protected WorldData worldData;
@Inject(method = "createLevels", at = @At("HEAD"))
private void together_addSurfaceRules(ChunkProgressListener worldGenerationProgressListener, CallbackInfo ci) {
WorldGenUtil.getWorldSettings().injectSurfaceRules(registryHolder, this.worldData.worldGenSettings());
}
}

View file

@ -23,7 +23,6 @@ public class VanillaWorldPresetSettings extends WorldPresetSettings {
@Override
public WorldGenSettings repairSettingsOnLoad(RegistryAccess registryAccess, WorldGenSettings settings) {
SurfaceRuleUtil.injectSurfaceRules(settings, SurfaceRuleRegistry.ALL_DIMENSIONS);
return settings;
}
@ -31,4 +30,9 @@ public class VanillaWorldPresetSettings extends WorldPresetSettings {
public BiomeSource addDatapackBiomes(BiomeSource biomeSource, Set<Holder<Biome>> datapackBiomes) {
return biomeSource;
}
public void injectSurfaceRules(RegistryAccess registryAccess, WorldGenSettings settings) {
SurfaceRuleUtil.injectSurfaceRules(settings, SurfaceRuleRegistry.ALL_DIMENSIONS);
}
}

View file

@ -52,4 +52,5 @@ public abstract class WorldPresetSettings {
public abstract Codec<? extends WorldPresetSettings> codec();
public abstract WorldGenSettings repairSettingsOnLoad(RegistryAccess registryAccess, WorldGenSettings settings);
public abstract BiomeSource addDatapackBiomes(BiomeSource biomeSource, Set<Holder<Biome>> datapackBiomes);
public abstract void injectSurfaceRules(RegistryAccess registryAccess, WorldGenSettings settings);
}