[Feature] Double Height Nether (for amplified worlds)
This commit is contained in:
parent
1e968fafc7
commit
172737e0fa
8 changed files with 135 additions and 34 deletions
|
@ -17,6 +17,8 @@ import com.mojang.serialization.codecs.RecordCodecBuilder;
|
|||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.core.RegistryAccess;
|
||||
import net.minecraft.data.BuiltinRegistries;
|
||||
import net.minecraft.data.worldgen.SurfaceRuleData;
|
||||
import net.minecraft.resources.RegistryOps;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
|
@ -24,13 +26,11 @@ import net.minecraft.world.level.biome.Biome;
|
|||
import net.minecraft.world.level.biome.BiomeGenerationSettings;
|
||||
import net.minecraft.world.level.biome.BiomeSource;
|
||||
import net.minecraft.world.level.biome.FeatureSorter;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.chunk.ChunkGenerator;
|
||||
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.NoiseGeneratorSettings;
|
||||
import net.minecraft.world.level.levelgen.RandomState;
|
||||
import net.minecraft.world.level.levelgen.WorldGenSettings;
|
||||
import net.minecraft.world.level.levelgen.*;
|
||||
import net.minecraft.world.level.levelgen.structure.StructureSet;
|
||||
import net.minecraft.world.level.levelgen.synth.NormalNoise;
|
||||
|
||||
|
@ -63,6 +63,12 @@ public class BCLChunkGenerator extends NoiseBasedChunkGenerator implements Resto
|
|||
.and(builderInstance.group(noiseGetter, biomeSourceCodec, settingsCodec))
|
||||
.apply(builderInstance, builderInstance.stable(BCLChunkGenerator::new));
|
||||
});
|
||||
protected static final NoiseSettings NETHER_NOISE_SETTINGS_AMPLIFIED = NoiseSettings.create(0, 256, 1, 4);
|
||||
public static final ResourceKey<NoiseGeneratorSettings> AMPLIFIED_NETHER = ResourceKey.create(
|
||||
Registry.NOISE_GENERATOR_SETTINGS_REGISTRY,
|
||||
BCLib.makeID("amplified_nether")
|
||||
);
|
||||
|
||||
public final BiomeSource initialBiomeSource;
|
||||
|
||||
public BCLChunkGenerator(
|
||||
|
@ -226,4 +232,24 @@ public class BCLChunkGenerator extends NoiseBasedChunkGenerator implements Resto
|
|||
//
|
||||
// return Holder.direct(noise);
|
||||
}
|
||||
|
||||
|
||||
public static NoiseGeneratorSettings amplifiedNether() {
|
||||
return new NoiseGeneratorSettings(
|
||||
NETHER_NOISE_SETTINGS_AMPLIFIED,
|
||||
Blocks.NETHERRACK.defaultBlockState(),
|
||||
Blocks.LAVA.defaultBlockState(),
|
||||
NoiseRouterData.noNewCaves(
|
||||
BuiltinRegistries.DENSITY_FUNCTION,
|
||||
NoiseRouterData.slideNetherLike(BuiltinRegistries.DENSITY_FUNCTION, 0, 256)
|
||||
),
|
||||
SurfaceRuleData.nether(),
|
||||
List.of(),
|
||||
32,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,33 +18,38 @@ public class BCLNetherBiomeSourceConfig implements BiomeSourceConfig<BCLibNether
|
|||
NetherBiomeMapType.VANILLA,
|
||||
256,
|
||||
86,
|
||||
false,
|
||||
false
|
||||
);
|
||||
public static final BCLNetherBiomeSourceConfig MINECRAFT_17 = new BCLNetherBiomeSourceConfig(
|
||||
NetherBiomeMapType.SQUARE,
|
||||
256,
|
||||
86,
|
||||
true
|
||||
true,
|
||||
false
|
||||
);
|
||||
public static final BCLNetherBiomeSourceConfig MINECRAFT_18 = new BCLNetherBiomeSourceConfig(
|
||||
NetherBiomeMapType.HEX,
|
||||
MINECRAFT_17.biomeSize,
|
||||
MINECRAFT_17.biomeSizeVertical,
|
||||
MINECRAFT_17.useVerticalBiomes
|
||||
MINECRAFT_17.useVerticalBiomes,
|
||||
MINECRAFT_17.amplified
|
||||
);
|
||||
|
||||
public static final BCLNetherBiomeSourceConfig MINECRAFT_18_LARGE = new BCLNetherBiomeSourceConfig(
|
||||
NetherBiomeMapType.HEX,
|
||||
MINECRAFT_18.biomeSize * 4,
|
||||
MINECRAFT_18.biomeSizeVertical * 2,
|
||||
MINECRAFT_18.useVerticalBiomes
|
||||
MINECRAFT_18.useVerticalBiomes,
|
||||
MINECRAFT_17.amplified
|
||||
);
|
||||
|
||||
public static final BCLNetherBiomeSourceConfig MINECRAFT_18_AMPLIFIED = new BCLNetherBiomeSourceConfig(
|
||||
NetherBiomeMapType.HEX,
|
||||
MINECRAFT_18.biomeSize,
|
||||
MINECRAFT_18.biomeSizeVertical * 2,
|
||||
false
|
||||
128,
|
||||
true,
|
||||
true
|
||||
);
|
||||
|
||||
public static final BCLNetherBiomeSourceConfig DEFAULT = MINECRAFT_18;
|
||||
|
@ -61,7 +66,10 @@ public class BCLNetherBiomeSourceConfig implements BiomeSourceConfig<BCLibNether
|
|||
.forGetter(o -> o.biomeSizeVertical),
|
||||
Codec.BOOL.fieldOf("use_vertical_biomes")
|
||||
.orElse(DEFAULT.useVerticalBiomes)
|
||||
.forGetter(o -> o.useVerticalBiomes)
|
||||
.forGetter(o -> o.useVerticalBiomes),
|
||||
Codec.BOOL.fieldOf("amplified")
|
||||
.orElse(DEFAULT.amplified)
|
||||
.forGetter(o -> o.amplified)
|
||||
)
|
||||
.apply(instance, BCLNetherBiomeSourceConfig::new));
|
||||
public final @NotNull NetherBiomeMapType mapVersion;
|
||||
|
@ -69,17 +77,20 @@ public class BCLNetherBiomeSourceConfig implements BiomeSourceConfig<BCLibNether
|
|||
public final int biomeSizeVertical;
|
||||
|
||||
public final boolean useVerticalBiomes;
|
||||
public final boolean amplified;
|
||||
|
||||
public BCLNetherBiomeSourceConfig(
|
||||
@NotNull NetherBiomeMapType mapVersion,
|
||||
int biomeSize,
|
||||
int biomeSizeVertical,
|
||||
boolean useVerticalBiomes
|
||||
boolean useVerticalBiomes,
|
||||
boolean amplified
|
||||
) {
|
||||
this.mapVersion = mapVersion;
|
||||
this.biomeSize = Mth.clamp(biomeSize, 1, 8192);
|
||||
this.biomeSizeVertical = Mth.clamp(biomeSizeVertical, 1, 8192);
|
||||
this.useVerticalBiomes = useVerticalBiomes;
|
||||
this.amplified = amplified;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -61,6 +61,7 @@ public class WorldSetupScreen extends LayoutScreen {
|
|||
Checkbox generateEndVoid;
|
||||
Checkbox netherLegacy;
|
||||
Checkbox netherVertical;
|
||||
Checkbox netherAmplified;
|
||||
|
||||
public LayoutComponent<?, ?> netherPage(BCLNetherBiomeSourceConfig netherConfig) {
|
||||
VerticalStack content = new VerticalStack(fill(), fit()).centerHorizontal();
|
||||
|
@ -78,6 +79,12 @@ public class WorldSetupScreen extends LayoutScreen {
|
|||
netherConfig.mapVersion == BCLNetherBiomeSourceConfig.NetherBiomeMapType.SQUARE
|
||||
);
|
||||
|
||||
netherAmplified = content.indent(20).addCheckbox(
|
||||
fit(), fit(),
|
||||
Component.translatable("title.screen.bclib.worldgen.nether_amplified"),
|
||||
netherConfig.amplified
|
||||
);
|
||||
|
||||
netherVertical = content.indent(20).addCheckbox(
|
||||
fit(), fit(),
|
||||
Component.translatable("title.screen.bclib.worldgen.nether_vertical"),
|
||||
|
@ -109,6 +116,7 @@ public class WorldSetupScreen extends LayoutScreen {
|
|||
|
||||
bclibNether.onChange((cb, state) -> {
|
||||
netherLegacy.setEnabled(state);
|
||||
netherAmplified.setEnabled(state);
|
||||
netherVertical.setEnabled(state);
|
||||
netherBiomeSize.setEnabled(state);
|
||||
netherVerticalBiomeSize.setEnabled(state && netherVertical.isChecked());
|
||||
|
@ -234,6 +242,8 @@ public class WorldSetupScreen extends LayoutScreen {
|
|||
private void updateSettings() {
|
||||
Map<ResourceKey<LevelStem>, ChunkGenerator> betterxDimensions = TogetherWorldPreset.getDimensionsMap(
|
||||
PresetsRegistry.BCL_WORLD);
|
||||
Map<ResourceKey<LevelStem>, ChunkGenerator> betterxAmplifiedDimensions = TogetherWorldPreset.getDimensionsMap(
|
||||
PresetsRegistry.BCL_WORLD_AMPLIFIED);
|
||||
Map<ResourceKey<LevelStem>, ChunkGenerator> vanillaDimensions = TogetherWorldPreset.getDimensionsMap(
|
||||
WorldPresets.NORMAL);
|
||||
BCLEndBiomeSourceConfig.EndBiomeMapType endVersion = BCLEndBiomeSourceConfig.DEFAULT.mapVersion;
|
||||
|
@ -271,10 +281,15 @@ public class WorldSetupScreen extends LayoutScreen {
|
|||
: BCLNetherBiomeSourceConfig.NetherBiomeMapType.HEX,
|
||||
netherBiomeSize.getValue() * 16,
|
||||
netherVerticalBiomeSize.getValue() * 16,
|
||||
netherVertical.isChecked()
|
||||
netherVertical.isChecked(),
|
||||
netherAmplified.isChecked()
|
||||
);
|
||||
|
||||
ChunkGenerator netherGenerator = betterxDimensions.get(LevelStem.NETHER);
|
||||
ChunkGenerator netherGenerator = (
|
||||
netherAmplified.isChecked()
|
||||
? betterxAmplifiedDimensions
|
||||
: betterxDimensions
|
||||
).get(LevelStem.NETHER);
|
||||
((BCLibNetherBiomeSource) netherGenerator.getBiomeSource()).setTogetherConfig(netherConfig);
|
||||
|
||||
updateConfiguration(LevelStem.NETHER, BuiltinDimensionTypes.NETHER, netherGenerator);
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
package org.betterx.bclib.mixin.common;
|
||||
|
||||
import org.betterx.bclib.api.v2.generator.BCLChunkGenerator;
|
||||
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
|
||||
|
||||
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.CallbackInfoReturnable;
|
||||
|
||||
@Mixin(NoiseGeneratorSettings.class)
|
||||
public abstract class NoiseGeneratorSettingsMixin {
|
||||
@Shadow
|
||||
static protected Holder<NoiseGeneratorSettings> register(
|
||||
Registry<NoiseGeneratorSettings> registry,
|
||||
ResourceKey<NoiseGeneratorSettings> resourceKey,
|
||||
NoiseGeneratorSettings noiseGeneratorSettings
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
@Inject(method = "bootstrap", at = @At("HEAD"))
|
||||
private static void bcl_addNoiseGenerators(
|
||||
Registry<NoiseGeneratorSettings> registry,
|
||||
CallbackInfoReturnable<Holder<NoiseGeneratorSettings>> cir
|
||||
) {
|
||||
register(registry, BCLChunkGenerator.AMPLIFIED_NETHER, BCLChunkGenerator.amplifiedNether());
|
||||
}
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
package org.betterx.bclib.registry;
|
||||
|
||||
import org.betterx.bclib.BCLib;
|
||||
import org.betterx.bclib.api.v2.generator.BCLChunkGenerator;
|
||||
import org.betterx.bclib.api.v2.generator.config.BCLEndBiomeSourceConfig;
|
||||
import org.betterx.bclib.api.v2.generator.config.BCLNetherBiomeSourceConfig;
|
||||
import org.betterx.bclib.api.v2.levelgen.LevelGenUtil;
|
||||
|
@ -19,6 +20,7 @@ import net.minecraft.world.level.levelgen.presets.WorldPreset;
|
|||
import java.util.Map;
|
||||
|
||||
public class PresetsRegistry implements WorldPresetBootstrap {
|
||||
|
||||
public static ResourceKey<WorldPreset> BCL_WORLD;
|
||||
public static ResourceKey<WorldPreset> BCL_WORLD_LARGE;
|
||||
public static ResourceKey<WorldPreset> BCL_WORLD_AMPLIFIED;
|
||||
|
@ -31,9 +33,8 @@ public class PresetsRegistry implements WorldPresetBootstrap {
|
|||
(overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) ->
|
||||
buildPreset(
|
||||
overworldStem,
|
||||
netherContext,
|
||||
BCLNetherBiomeSourceConfig.DEFAULT, endContext,
|
||||
BCLEndBiomeSourceConfig.DEFAULT
|
||||
netherContext, BCLNetherBiomeSourceConfig.DEFAULT,
|
||||
endContext, BCLEndBiomeSourceConfig.DEFAULT
|
||||
),
|
||||
true
|
||||
);
|
||||
|
@ -56,23 +57,31 @@ public class PresetsRegistry implements WorldPresetBootstrap {
|
|||
true
|
||||
);
|
||||
|
||||
BCL_WORLD_AMPLIFIED =
|
||||
WorldPresets.register(
|
||||
BCLib.makeID("amplified"),
|
||||
(overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> {
|
||||
Holder<NoiseGeneratorSettings> largeBiomeGenerator = noiseSettings
|
||||
.getOrCreateHolderOrThrow(NoiseGeneratorSettings.AMPLIFIED);
|
||||
return buildPreset(
|
||||
noiseBasedOverworld.make(
|
||||
overworldStem.generator().getBiomeSource(),
|
||||
largeBiomeGenerator
|
||||
),
|
||||
netherContext, BCLNetherBiomeSourceConfig.MINECRAFT_18_AMPLIFIED,
|
||||
endContext, BCLEndBiomeSourceConfig.MINECRAFT_18_AMPLIFIED
|
||||
);
|
||||
},
|
||||
true
|
||||
);
|
||||
BCL_WORLD_AMPLIFIED = WorldPresets.register(
|
||||
BCLib.makeID("amplified"),
|
||||
(overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> {
|
||||
Holder<NoiseGeneratorSettings> amplifiedBiomeGenerator = noiseSettings
|
||||
.getOrCreateHolderOrThrow(NoiseGeneratorSettings.AMPLIFIED);
|
||||
|
||||
WorldGenUtil.Context amplifiedNetherContext = new WorldGenUtil.Context(
|
||||
netherContext.biomes,
|
||||
netherContext.dimension,
|
||||
netherContext.structureSets,
|
||||
netherContext.noiseParameters,
|
||||
Holder.direct(BCLChunkGenerator.amplifiedNether())
|
||||
);
|
||||
|
||||
return buildPreset(
|
||||
noiseBasedOverworld.make(
|
||||
overworldStem.generator().getBiomeSource(),
|
||||
amplifiedBiomeGenerator
|
||||
),
|
||||
amplifiedNetherContext, BCLNetherBiomeSourceConfig.MINECRAFT_18_AMPLIFIED,
|
||||
endContext, BCLEndBiomeSourceConfig.MINECRAFT_18_AMPLIFIED
|
||||
);
|
||||
},
|
||||
true
|
||||
);
|
||||
|
||||
BCL_WORLD_17 = WorldPresets.register(
|
||||
BCLib.makeID("legacy_17"),
|
||||
|
|
|
@ -64,6 +64,7 @@
|
|||
"title.screen.bclib.worldgen.nether_biome_size": "Größe",
|
||||
"title.screen.bclib.worldgen.nether_vertical_biome_size": "Biomhöhe",
|
||||
"title.screen.bclib.worldgen.nether_vertical": "Biome auch vertikal verteilen",
|
||||
"title.screen.bclib.worldgen.nether_amplified": "Doppelte Höhe",
|
||||
"title.screen.bclib.worldgen.land_biome_size": "Land-Biome",
|
||||
"title.screen.bclib.worldgen.void_biome_size": "Kleine Inseln",
|
||||
"title.screen.bclib.worldgen.center_biome_size": "Zentralbiome",
|
||||
|
|
|
@ -67,6 +67,7 @@
|
|||
"title.screen.bclib.worldgen.nether_biome_size": "Biome Size",
|
||||
"title.screen.bclib.worldgen.nether_vertical_biome_size": "Biome Height",
|
||||
"title.screen.bclib.worldgen.nether_vertical": "Generate vertical Biomes",
|
||||
"title.screen.bclib.worldgen.nether_amplified": "Double Height",
|
||||
"title.screen.bclib.worldgen.land_biome_size": "Land Biomes",
|
||||
"title.screen.bclib.worldgen.void_biome_size": "Small Island Biomes",
|
||||
"title.screen.bclib.worldgen.center_biome_size": "Central Biomes",
|
||||
|
|
|
@ -21,6 +21,8 @@ accessible method net/minecraft/world/entity/ai/village/poi/PoiTypes register (L
|
|||
accessible method net/minecraft/world/level/levelgen/SurfaceRules$SequenceRuleSource <init> (Ljava/util/List;)V
|
||||
accessible method net/minecraft/core/Registry registerSimple (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/core/Registry$RegistryBootstrap;)Lnet/minecraft/core/Registry;
|
||||
accessible method net/minecraft/world/entity/SpawnPlacements register (Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/entity/SpawnPlacements$Type;Lnet/minecraft/world/level/levelgen/Heightmap$Types;Lnet/minecraft/world/entity/SpawnPlacements$SpawnPredicate;)V
|
||||
|
||||
accessible method net/minecraft/world/level/levelgen/NoiseRouterData nether (Lnet/minecraft/core/Registry;)Lnet/minecraft/world/level/levelgen/NoiseRouter;
|
||||
accessible method net/minecraft/world/level/levelgen/NoiseRouterData noNewCaves (Lnet/minecraft/core/Registry;Lnet/minecraft/world/level/levelgen/DensityFunction;)Lnet/minecraft/world/level/levelgen/NoiseRouter;
|
||||
accessible method net/minecraft/world/level/levelgen/NoiseRouterData slideNetherLike (Lnet/minecraft/core/Registry;II)Lnet/minecraft/world/level/levelgen/DensityFunction;
|
||||
#Fields
|
||||
accessible field net/minecraft/world/entity/ai/village/poi/PoiTypes TYPE_BY_STATE Ljava/util/Map;
|
Loading…
Add table
Add a link
Reference in a new issue