Fixed DimensionType Mixin

This commit is contained in:
Frank 2021-11-14 11:38:14 +01:00
parent 8b314577ef
commit a6e538b004

View file

@ -1,11 +1,18 @@
package ru.bclib.mixin.common; package ru.bclib.mixin.common;
import com.mojang.serialization.Lifecycle;
import net.minecraft.core.MappedRegistry;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.core.RegistryAccess;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.MultiNoiseBiomeSource;
import net.minecraft.world.level.biome.TheEndBiomeSource;
import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.DimensionType;
import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
import net.minecraft.world.level.levelgen.synth.NormalNoise;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
@ -16,25 +23,45 @@ import ru.bclib.world.generator.GeneratorOptions;
@Mixin(value = DimensionType.class, priority = 100) @Mixin(value = DimensionType.class, priority = 100)
public class DimensionTypeMixin { public class DimensionTypeMixin {
@Inject(method = "defaultNetherGenerator", at = @At("HEAD"), cancellable = true) @Inject(method="defaultDimensions(Lnet/minecraft/core/RegistryAccess;JZ)Lnet/minecraft/core/MappedRegistry;", at=@At("HEAD"), cancellable = true)
private static void be_replaceNetherBiomeSource(Registry<Biome> biomeRegistry, Registry<NoiseGeneratorSettings> chunkGeneratorSettingsRegistry, long seed, CallbackInfoReturnable<ChunkGenerator> info) { static void bclib_defaultDimensions(RegistryAccess registryAccess, long l, boolean bl, CallbackInfoReturnable<MappedRegistry<LevelStem>> cir){
if (GeneratorOptions.customNetherBiomeSource()) { MappedRegistry<LevelStem> mappedRegistry = new MappedRegistry<>(Registry.LEVEL_STEM_REGISTRY, Lifecycle.experimental());
info.setReturnValue(new NoiseBasedChunkGenerator( Registry<DimensionType> registry = registryAccess.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY);
new BCLibNetherBiomeSource(biomeRegistry, seed), Registry<Biome> registry2 = registryAccess.registryOrThrow(Registry.BIOME_REGISTRY);
seed, Registry<NoiseGeneratorSettings> registry3 = registryAccess.registryOrThrow(Registry.NOISE_GENERATOR_SETTINGS_REGISTRY);
() -> chunkGeneratorSettingsRegistry.getOrThrow(NoiseGeneratorSettings.NETHER) Registry<NormalNoise.NoiseParameters> registry4 = registryAccess.registryOrThrow(Registry.NOISE_REGISTRY);
));
} mappedRegistry.register(LevelStem.NETHER, new LevelStem(
() -> registry.getOrThrow(DimensionType.NETHER_LOCATION),
bclib_replaceNetherBiomeSource(registry2, registry3, registry4, l, bl)
), Lifecycle.stable());
mappedRegistry.register(LevelStem.END, new LevelStem(
() -> registry.getOrThrow(DimensionType.END_LOCATION),
bclib_replaceEndBiomeSource(registry2, registry3, registry4, l)
), Lifecycle.stable());
cir.setReturnValue(mappedRegistry);
} }
@Inject(method = "defaultEndGenerator", at = @At("HEAD"), cancellable = true) private static ChunkGenerator bclib_replaceNetherBiomeSource(Registry<Biome> biomeRegistry, Registry<NoiseGeneratorSettings> chunkGeneratorSettingsRegistry, Registry<NormalNoise.NoiseParameters> noiseRegistry , long seed, boolean bl) {
private static void be_replaceEndBiomeSource(Registry<Biome> biomeRegistry, Registry<NoiseGeneratorSettings> chunkGeneratorSettingsRegistry, long seed, CallbackInfoReturnable<ChunkGenerator> info) { return new NoiseBasedChunkGenerator(
if (GeneratorOptions.customEndBiomeSource()) { noiseRegistry,
info.setReturnValue(new NoiseBasedChunkGenerator( GeneratorOptions.customNetherBiomeSource()
new BCLibEndBiomeSource(biomeRegistry, seed), ? new BCLibNetherBiomeSource(biomeRegistry, seed)
: MultiNoiseBiomeSource.Preset.NETHER.biomeSource(biomeRegistry, bl),
seed, seed,
() -> chunkGeneratorSettingsRegistry.getOrThrow(NoiseGeneratorSettings.END) () -> chunkGeneratorSettingsRegistry.getOrThrow(NoiseGeneratorSettings.NETHER)
)); );
} }
private static ChunkGenerator bclib_replaceEndBiomeSource(Registry<Biome> biomeRegistry, Registry<NoiseGeneratorSettings> chunkGeneratorSettingsRegistry, Registry<NormalNoise.NoiseParameters> noiseRegistry , long seed) {
return new NoiseBasedChunkGenerator(
noiseRegistry,
GeneratorOptions.customEndBiomeSource()
? new BCLibEndBiomeSource(biomeRegistry, seed)
: new TheEndBiomeSource(biomeRegistry, seed),
seed,
() -> chunkGeneratorSettingsRegistry.getOrThrow(NoiseGeneratorSettings.END)
);
} }
} }