Improved SurfaceRule Handling
This commit is contained in:
parent
e08d85b605
commit
bdf30109f6
16 changed files with 266 additions and 161 deletions
|
@ -2,12 +2,8 @@ package org.betterx.bclib.mixin.common;
|
|||
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.world.level.StructureManager;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
||||
import net.minecraft.world.level.levelgen.*;
|
||||
import net.minecraft.world.level.levelgen.blending.Blender;
|
||||
import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator;
|
||||
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
|
||||
import net.minecraft.world.level.levelgen.synth.NormalNoise;
|
||||
|
||||
import org.betterx.bclib.interfaces.NoiseGeneratorSettingsProvider;
|
||||
|
@ -16,8 +12,6 @@ import org.spongepowered.asm.mixin.Final;
|
|||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
|
||||
@Mixin(NoiseBasedChunkGenerator.class)
|
||||
public abstract class NoiseBasedChunkGeneratorMixin implements SurfaceProvider, NoiseGeneratorSettingsProvider {
|
||||
@Final
|
||||
|
@ -27,12 +21,6 @@ public abstract class NoiseBasedChunkGeneratorMixin implements SurfaceProvider,
|
|||
@Shadow
|
||||
@Final
|
||||
private Registry<NormalNoise.NoiseParameters> noises;
|
||||
@Final
|
||||
@Shadow
|
||||
private Aquifer.FluidPicker globalFluidPicker;
|
||||
|
||||
private static final BlockState bclib_air = Blocks.AIR.defaultBlockState();
|
||||
private static Constructor<?> bclib_constructor;
|
||||
|
||||
@Override
|
||||
public NoiseGeneratorSettings bclib_getNoiseGeneratorSettings() {
|
||||
|
@ -48,11 +36,4 @@ public abstract class NoiseBasedChunkGeneratorMixin implements SurfaceProvider,
|
|||
public Registry<NormalNoise.NoiseParameters> bclib_getNoises() {
|
||||
return noises;
|
||||
}
|
||||
|
||||
@Shadow
|
||||
protected abstract NoiseChunk createNoiseChunk(ChunkAccess chunkAccess,
|
||||
StructureManager structureManager,
|
||||
Blender blender,
|
||||
RandomState randomState);
|
||||
|
||||
}
|
||||
|
|
|
@ -68,6 +68,15 @@ public class NoiseGeneratorSettingsMixin implements SurfaceRuleProvider {
|
|||
bclib_setSurfaceRule(SurfaceRules.sequence(rules.toArray(new RuleSource[rules.size()])));
|
||||
}
|
||||
|
||||
public void bclib_overwrite(SurfaceRules.RuleSource surfaceRule) {
|
||||
if (surfaceRule == this.surfaceRule) return;
|
||||
if (this.bcl_containsOverride) {
|
||||
System.out.println("Adding another override");
|
||||
}
|
||||
this.bcl_containsOverride = true;
|
||||
this.surfaceRule = surfaceRule;
|
||||
}
|
||||
|
||||
void bclib_setSurfaceRule(SurfaceRules.RuleSource surfaceRule) {
|
||||
if (bclib_originalSurfaceRule == null) {
|
||||
bclib_originalSurfaceRule = this.surfaceRule;
|
||||
|
@ -75,6 +84,8 @@ public class NoiseGeneratorSettingsMixin implements SurfaceRuleProvider {
|
|||
this.surfaceRule = surfaceRule;
|
||||
}
|
||||
|
||||
private boolean bcl_containsOverride = false;
|
||||
|
||||
RuleSource bclib_getOriginalSurfaceRule() {
|
||||
if (bclib_originalSurfaceRule == null) {
|
||||
return surfaceRule;
|
||||
|
|
|
@ -11,8 +11,11 @@ import net.minecraft.world.level.storage.PrimaryLevelData;
|
|||
import com.mojang.datafixers.DataFixer;
|
||||
import com.mojang.serialization.Dynamic;
|
||||
import com.mojang.serialization.Lifecycle;
|
||||
import org.betterx.bclib.api.worldgen.BCLChunkGenerator;
|
||||
import org.betterx.bclib.api.worldgen.WorldGenUtil;
|
||||
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.ModifyArg;
|
||||
|
@ -23,9 +26,18 @@ import org.jetbrains.annotations.Nullable;
|
|||
|
||||
@Mixin(PrimaryLevelData.class)
|
||||
public class PrimaryLevelDataMixin {
|
||||
@Shadow
|
||||
@Final
|
||||
private WorldGenSettings worldGenSettings;
|
||||
private static final ThreadLocal<Optional<RegistryOps<Tag>>> bcl_lastRegistryAccess = ThreadLocal.withInitial(
|
||||
() -> Optional.empty());
|
||||
|
||||
@ModifyArg(method = "<init>(Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldGenSettings;Lcom/mojang/serialization/Lifecycle;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/PrimaryLevelData;<init>(Lcom/mojang/datafixers/DataFixer;ILnet/minecraft/nbt/CompoundTag;ZIIIFJJIIIZIZZZLnet/minecraft/world/level/border/WorldBorder$Settings;IILjava/util/UUID;Ljava/util/Set;Lnet/minecraft/world/level/timers/TimerQueue;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldGenSettings;Lcom/mojang/serialization/Lifecycle;)V"))
|
||||
private static WorldGenSettings bcl_fixOtherSettings(WorldGenSettings worldGenSettings) {
|
||||
BCLChunkGenerator.injectNoiseSettings(worldGenSettings);
|
||||
return worldGenSettings;
|
||||
}
|
||||
|
||||
@Inject(method = "parse", at = @At("HEAD"))
|
||||
private static void bcl_parse(Dynamic<Tag> dynamic,
|
||||
DataFixer dataFixer,
|
||||
|
|
|
@ -57,18 +57,18 @@ public abstract class ServerLevelMixin extends Level {
|
|||
CallbackInfo ci) {
|
||||
ServerLevel level = ServerLevel.class.cast(this);
|
||||
LifeCycleAPI._runLevelLoad(level,
|
||||
server,
|
||||
executor,
|
||||
levelStorageAccess,
|
||||
serverLevelData,
|
||||
resourceKey,
|
||||
chunkProgressListener,
|
||||
bl,
|
||||
l,
|
||||
list,
|
||||
bl2);
|
||||
server,
|
||||
executor,
|
||||
levelStorageAccess,
|
||||
serverLevelData,
|
||||
resourceKey,
|
||||
chunkProgressListener,
|
||||
bl,
|
||||
l,
|
||||
list,
|
||||
bl2);
|
||||
|
||||
BiomeAPI.applyModifications(ServerLevel.class.cast(this));
|
||||
BiomeAPI.applyModificationsDeprecated(ServerLevel.class.cast(this));
|
||||
|
||||
if (level.dimension() == Level.NETHER) {
|
||||
BCLibNetherBiomeSource.setWorldHeight(level.getChunkSource().getGenerator().getGenDepth());
|
||||
|
|
|
@ -58,11 +58,7 @@ public abstract class WorldOpenFlowsMixin {
|
|||
RegistryAccess registryAccess,
|
||||
WorldGenSettings worldGenSettings,
|
||||
CallbackInfo ci) {
|
||||
DataExchangeAPI.prepareServerside();
|
||||
BiomeAPI.prepareNewLevel();
|
||||
|
||||
DataFixerAPI.createWorldData(this.levelSource, levelID, worldGenSettings);
|
||||
LifeCycleAPI._runBeforeLevelLoad();
|
||||
LifeCycleAPI.startingWorld(levelID, worldGenSettings, this.levelSource);
|
||||
}
|
||||
|
||||
@Inject(method = "createLevelFromExistingSettings", at = @At("HEAD"))
|
||||
|
@ -71,10 +67,6 @@ public abstract class WorldOpenFlowsMixin {
|
|||
RegistryAccess.Frozen frozen,
|
||||
WorldData worldData,
|
||||
CallbackInfo ci) {
|
||||
DataExchangeAPI.prepareServerside();
|
||||
BiomeAPI.prepareNewLevel();
|
||||
|
||||
DataFixerAPI.createWorldData(levelStorageAccess, worldData.worldGenSettings());
|
||||
LifeCycleAPI._runBeforeLevelLoad();
|
||||
//LifeCycleAPI.startWorld(levelStorageAccess, worldData.worldGenSettings());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue