Moved WorldPreset creating to DataGen step

This commit is contained in:
Frank 2022-12-02 16:03:00 +01:00
parent ad0a82c2f0
commit a592c05b4d
26 changed files with 452 additions and 431 deletions

View file

@ -20,6 +20,7 @@ import org.betterx.bclib.recipes.AnvilRecipe;
import org.betterx.bclib.recipes.CraftingRecipes; import org.betterx.bclib.recipes.CraftingRecipes;
import org.betterx.bclib.registry.BaseBlockEntities; import org.betterx.bclib.registry.BaseBlockEntities;
import org.betterx.bclib.registry.BaseRegistry; import org.betterx.bclib.registry.BaseRegistry;
import org.betterx.bclib.registry.PresetsRegistry;
import org.betterx.worlds.together.WorldsTogether; import org.betterx.worlds.together.WorldsTogether;
import org.betterx.worlds.together.util.Logger; import org.betterx.worlds.together.util.Logger;
import org.betterx.worlds.together.world.WorldConfig; import org.betterx.worlds.together.world.WorldConfig;
@ -41,13 +42,14 @@ public class BCLib implements ModInitializer {
.isPresent(); .isPresent();
private void onDatagen() { private void onDatagen() {
} }
@Override @Override
public void onInitialize() { public void onInitialize() {
WorldsTogether.onInitialize(); WorldsTogether.onInitialize();
PresetsRegistry.register();
LevelGenEvents.register(); LevelGenEvents.register();
BlockPredicates.ensureStaticInitialization(); BlockPredicates.ensureStaticInitialization();
BCLBiomeRegistry.ensureStaticallyLoaded(); BCLBiomeRegistry.ensureStaticallyLoaded();

View file

@ -1,6 +1,7 @@
package org.betterx.bclib.api.v2.generator; package org.betterx.bclib.api.v2.generator;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome;
import org.betterx.bclib.api.v2.levelgen.biomes.InternalBiomeAPI; import org.betterx.bclib.api.v2.levelgen.biomes.InternalBiomeAPI;
import org.betterx.worlds.together.biomesource.BiomeSourceFromRegistry; import org.betterx.worlds.together.biomesource.BiomeSourceFromRegistry;
import org.betterx.worlds.together.biomesource.BiomeSourceHelper; import org.betterx.worlds.together.biomesource.BiomeSourceHelper;
@ -10,6 +11,7 @@ import org.betterx.worlds.together.world.BiomeSourceWithSeed;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.HolderGetter; import net.minecraft.core.HolderGetter;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.biome.BiomeSource;
@ -17,13 +19,13 @@ import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import java.util.Comparator; import java.lang.reflect.Field;
import java.util.List; import java.util.*;
import java.util.Set;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public abstract class BCLBiomeSource extends BiomeSource implements BiomeSourceWithSeed, MergeableBiomeSource<BCLBiomeSource>, BiomeSourceWithNoiseRelatedSettings, BiomeSourceFromRegistry<BCLBiomeSource> { public abstract class BCLBiomeSource extends BiomeSource implements BiomeSourceWithSeed, MergeableBiomeSource<BCLBiomeSource>, BiomeSourceWithNoiseRelatedSettings, BiomeSourceFromRegistry<BCLBiomeSource> {
protected final HolderGetter<Biome> biomeRegistry; protected final HolderGetter<Biome> biomeRegistry;
protected final HolderGetter<BCLBiome> bclBiomeRegistry;
private int registryModificationCounter; private int registryModificationCounter;
protected long currentSeed; protected long currentSeed;
protected int maxHeight; protected int maxHeight;
@ -42,12 +44,14 @@ public abstract class BCLBiomeSource extends BiomeSource implements BiomeSourceW
protected BCLBiomeSource( protected BCLBiomeSource(
HolderGetter<Biome> biomeRegistry, HolderGetter<Biome> biomeRegistry,
HolderGetter<BCLBiome> bclBiomeRegistry,
List<Holder<Biome>> list, List<Holder<Biome>> list,
long seed long seed
) { ) {
super(preInit(biomeRegistry, list)); super(preInit(biomeRegistry, list));
this.registryModificationCounter = InternalBiomeAPI.getBiomeRegistryModificationCount(biomeRegistry); this.registryModificationCounter = InternalBiomeAPI.getBiomeRegistryModificationCount(biomeRegistry);
this.biomeRegistry = biomeRegistry; this.biomeRegistry = biomeRegistry;
this.bclBiomeRegistry = bclBiomeRegistry;
this.currentSeed = seed; this.currentSeed = seed;
} }
@ -103,27 +107,41 @@ public abstract class BCLBiomeSource extends BiomeSource implements BiomeSourceW
} }
protected static List<Holder<Biome>> getBiomes( protected static List<Holder<Biome>> getBiomes(
HolderGetter<Biome> biomeRegistry, HolderGetter<Biome> getter,
HolderGetter<BCLBiome> bclBiomeRegistry,
List<String> exclude, List<String> exclude,
List<String> include, List<String> include,
BCLibNetherBiomeSource.ValidBiomePredicate test BCLibNetherBiomeSource.ValidBiomePredicate test
) { ) {
//TODO: 1.19.3 restore this code Optional<Field> res = Arrays.stream(getter.getClass().getFields())
return List.of();/*biomeRegistry.stream() .filter(f -> Registry.class.isAssignableFrom(f.getType()))
.filter(biome -> biomeRegistry.getResourceKey(biome).isPresent()) .findFirst();
if (res.isPresent()) {
try {
Registry<Biome> biomeRegistry = (Registry<Biome>) res.get().get(getter);
.map(biome -> (Holder<Biome>) biomeRegistry.getHolderOrThrow( return biomeRegistry.stream()
biomeRegistry.getResourceKey(biome).get()) .filter(biome -> biomeRegistry.getResourceKey(biome).isPresent())
) .map(biome -> (Holder<Biome>) biomeRegistry.getHolderOrThrow(
.filter(biome -> { biomeRegistry.getResourceKey(biome).get())
ResourceLocation location = biome.unwrapKey().orElseThrow().location(); )
final String strLocation = location.toString(); .filter(biome -> {
if (exclude.contains(strLocation)) return false; ResourceLocation location = biome.unwrapKey().orElseThrow().location();
if (include.contains(strLocation)) return true; final String strLocation = location.toString();
if (exclude.contains(strLocation)) return false;
if (include.contains(strLocation)) return true;
return test.isValid(biome, location); return test.isValid(biome, location);
}) })
.toList();*/ .toList();
} catch (IllegalAccessException e) {
BCLib.LOGGER.error("Unable to load field", e);
return List.of();
}
} else {
BCLib.LOGGER.error("Unable to access Biome Registry..");
return List.of();
}
} }
@Override @Override

View file

@ -10,6 +10,7 @@ import org.betterx.bclib.config.Configs;
import org.betterx.bclib.interfaces.BiomeMap; import org.betterx.bclib.interfaces.BiomeMap;
import org.betterx.worlds.together.biomesource.BiomeSourceWithConfig; import org.betterx.worlds.together.biomesource.BiomeSourceWithConfig;
import org.betterx.worlds.together.biomesource.ReloadableBiomeSource; import org.betterx.worlds.together.biomesource.ReloadableBiomeSource;
import org.betterx.worlds.together.world.event.WorldBootstrap;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
@ -35,24 +36,25 @@ import org.jetbrains.annotations.NotNull;
public class BCLibEndBiomeSource extends BCLBiomeSource implements BiomeSourceWithConfig<BCLibEndBiomeSource, BCLEndBiomeSourceConfig>, ReloadableBiomeSource { public class BCLibEndBiomeSource extends BCLBiomeSource implements BiomeSourceWithConfig<BCLibEndBiomeSource, BCLEndBiomeSourceConfig>, ReloadableBiomeSource {
public static Codec<BCLibEndBiomeSource> CODEC public static Codec<BCLibEndBiomeSource> CODEC
= RecordCodecBuilder.create((instance) -> instance.group( = RecordCodecBuilder.create((instance) -> instance
RegistryOps .group(
.retrieveElement(Registries.BIOME), RegistryOps.retrieveGetter(Registries.BIOME),
Codec RegistryOps.retrieveGetter(BCLBiomeRegistry.BCL_BIOMES_REGISTRY),
.LONG Codec
.fieldOf("seed") .LONG
.stable() .fieldOf("seed")
.forGetter(source -> source.currentSeed), .stable()
BCLEndBiomeSourceConfig .forGetter(source -> source.currentSeed),
.CODEC BCLEndBiomeSourceConfig
.fieldOf("config") .CODEC
.orElse(BCLEndBiomeSourceConfig.DEFAULT) .fieldOf("config")
.forGetter(o -> o.config) .orElse(BCLEndBiomeSourceConfig.DEFAULT)
) .forGetter(o -> o.config)
.apply( )
instance, .apply(
instance.stable(BCLibEndBiomeSource::new) instance,
) instance.stable(BCLibEndBiomeSource::new)
)
); );
private final Point pos; private final Point pos;
private BiomeMap mapLand; private BiomeMap mapLand;
@ -69,38 +71,41 @@ public class BCLibEndBiomeSource extends BCLBiomeSource implements BiomeSourceWi
private BCLEndBiomeSourceConfig config; private BCLEndBiomeSourceConfig config;
private BCLibEndBiomeSource( private BCLibEndBiomeSource(
Holder.Reference<Registry<Biome>> registryReference, HolderGetter<Biome> biomeRegistry,
HolderGetter<BCLBiome> bclBiomeRegistry,
long seed, long seed,
BCLEndBiomeSourceConfig bclEndBiomeSourceConfig BCLEndBiomeSourceConfig config
) { ) {
this(registryReference.value().asLookup(), seed, bclEndBiomeSourceConfig); this(biomeRegistry, bclBiomeRegistry, seed, config, true);
} }
private BCLibEndBiomeSource(HolderGetter<Biome> biomeRegistry, long seed, BCLEndBiomeSourceConfig config) { public BCLibEndBiomeSource(
this(biomeRegistry, seed, config, true); HolderGetter<Biome> biomeRegistry,
} HolderGetter<BCLBiome> bclBiomeRegistry,
BCLEndBiomeSourceConfig config
public BCLibEndBiomeSource(HolderGetter<Biome> biomeRegistry, BCLEndBiomeSourceConfig config) { ) {
this(biomeRegistry, 0, config, false); this(biomeRegistry, bclBiomeRegistry, 0, config, false);
} }
private BCLibEndBiomeSource( private BCLibEndBiomeSource(
HolderGetter<Biome> biomeRegistry, HolderGetter<Biome> biomeRegistry,
HolderGetter<BCLBiome> bclBiomeRegistry,
long seed, long seed,
BCLEndBiomeSourceConfig config, BCLEndBiomeSourceConfig config,
boolean initMaps boolean initMaps
) { ) {
this(biomeRegistry, getBiomes(biomeRegistry), seed, config, initMaps); this(biomeRegistry, bclBiomeRegistry, getBiomes(biomeRegistry, bclBiomeRegistry), seed, config, initMaps);
} }
private BCLibEndBiomeSource( private BCLibEndBiomeSource(
HolderGetter<Biome> biomeRegistry, HolderGetter<Biome> biomeRegistry,
HolderGetter<BCLBiome> bclBiomeRegistry,
List<Holder<Biome>> list, List<Holder<Biome>> list,
long seed, long seed,
BCLEndBiomeSourceConfig config, BCLEndBiomeSourceConfig config,
boolean initMaps boolean initMaps
) { ) {
super(biomeRegistry, list, seed); super(biomeRegistry, bclBiomeRegistry, list, seed);
this.config = config; this.config = config;
rebuildBiomePickers(); rebuildBiomePickers();
@ -114,6 +119,21 @@ public class BCLibEndBiomeSource extends BCLBiomeSource implements BiomeSourceWi
@NotNull @NotNull
private void rebuildBiomePickers() { private void rebuildBiomePickers() {
if (WorldBootstrap.getLastRegistryAccess() == null) {
this.endLandBiomePicker = null;
this.endVoidBiomePicker = null;
this.endCenterBiomePicker = null;
this.endBarrensBiomePicker = null;
this.deciders = List.of();
return;
}
HolderLookup.RegistryLookup<Biome> biomeRegistry = WorldBootstrap.getLastRegistryAccess()
.lookupOrThrow(Registries.BIOME);
Registry<BCLBiome> bclBiomeRegistry = WorldBootstrap.getLastRegistryAccess()
.registryOrThrow(BCLBiomeRegistry.BCL_BIOMES_REGISTRY);
var includeMap = Configs.BIOMES_CONFIG.getBiomeIncludeMap(); var includeMap = Configs.BIOMES_CONFIG.getBiomeIncludeMap();
var excludeList = Configs.BIOMES_CONFIG.getExcludeMatching(BiomeAPI.BiomeType.END); var excludeList = Configs.BIOMES_CONFIG.getExcludeMatching(BiomeAPI.BiomeType.END);
@ -144,11 +164,11 @@ public class BCLibEndBiomeSource extends BCLBiomeSource implements BiomeSourceWi
return; return;
} }
final BCLBiome bclBiome; final BCLBiome bclBiome;
if (!BiomeAPI.hasBiome(biomeID)) { if (!bclBiomeRegistry.containsKey(biomeID)) {
bclBiome = new BCLBiome(biomeID, BiomeAPI.BiomeType.END_LAND); bclBiome = new BCLBiome(biomeID, BiomeAPI.BiomeType.END_LAND);
InternalBiomeAPI.registerBCLBiomeData(bclBiome); InternalBiomeAPI.registerBCLBiomeData(bclBiome);
} else { } else {
bclBiome = BiomeAPI.getBiome(biomeID); bclBiome = bclBiomeRegistry.get(biomeID);
} }
@ -238,7 +258,7 @@ public class BCLibEndBiomeSource extends BCLBiomeSource implements BiomeSourceWi
} }
protected BCLBiomeSource cloneForDatapack(Set<Holder<Biome>> datapackBiomes) { protected BCLBiomeSource cloneForDatapack(Set<Holder<Biome>> datapackBiomes) {
datapackBiomes.addAll(getNonVanillaBiomes(this.biomeRegistry)); datapackBiomes.addAll(getNonVanillaBiomes(this.biomeRegistry, this.bclBiomeRegistry));
datapackBiomes.addAll(possibleBiomes().stream() datapackBiomes.addAll(possibleBiomes().stream()
.filter(h -> !h.unwrapKey() .filter(h -> !h.unwrapKey()
.orElseThrow() .orElseThrow()
@ -249,6 +269,7 @@ public class BCLibEndBiomeSource extends BCLBiomeSource implements BiomeSourceWi
return new BCLibEndBiomeSource( return new BCLibEndBiomeSource(
this.biomeRegistry, this.biomeRegistry,
this.bclBiomeRegistry,
datapackBiomes.stream() datapackBiomes.stream()
.filter(b -> b.unwrapKey() .filter(b -> b.unwrapKey()
.orElse(null) != BCLBiomeRegistry.EMPTY_BIOME.getBiomeKey()) .orElse(null) != BCLBiomeRegistry.EMPTY_BIOME.getBiomeKey())
@ -259,18 +280,26 @@ public class BCLibEndBiomeSource extends BCLBiomeSource implements BiomeSourceWi
); );
} }
private static List<Holder<Biome>> getNonVanillaBiomes(HolderGetter<Biome> biomeRegistry) { private static List<Holder<Biome>> getNonVanillaBiomes(
HolderGetter<Biome> biomeRegistry,
HolderGetter<BCLBiome> bclBiomeRegistry
) {
return getBiomes( return getBiomes(
biomeRegistry, biomeRegistry,
bclBiomeRegistry,
Configs.BIOMES_CONFIG.getExcludeMatching(BiomeAPI.BiomeType.END), Configs.BIOMES_CONFIG.getExcludeMatching(BiomeAPI.BiomeType.END),
Configs.BIOMES_CONFIG.getIncludeMatching(BiomeAPI.BiomeType.END), Configs.BIOMES_CONFIG.getIncludeMatching(BiomeAPI.BiomeType.END),
BCLibEndBiomeSource::isValidNonVanillaEndBiome BCLibEndBiomeSource::isValidNonVanillaEndBiome
); );
} }
private static List<Holder<Biome>> getBiomes(HolderGetter<Biome> biomeRegistry) { private static List<Holder<Biome>> getBiomes(
HolderGetter<Biome> biomeRegistry,
HolderGetter<BCLBiome> bclBiomeRegistry
) {
return getBiomes( return getBiomes(
biomeRegistry, biomeRegistry,
bclBiomeRegistry,
Configs.BIOMES_CONFIG.getExcludeMatching(BiomeAPI.BiomeType.END), Configs.BIOMES_CONFIG.getExcludeMatching(BiomeAPI.BiomeType.END),
Configs.BIOMES_CONFIG.getIncludeMatching(BiomeAPI.BiomeType.END), Configs.BIOMES_CONFIG.getIncludeMatching(BiomeAPI.BiomeType.END),
BCLibEndBiomeSource::isValidEndBiome BCLibEndBiomeSource::isValidEndBiome

View file

@ -12,6 +12,7 @@ import org.betterx.bclib.config.Configs;
import org.betterx.bclib.interfaces.BiomeMap; import org.betterx.bclib.interfaces.BiomeMap;
import org.betterx.worlds.together.biomesource.BiomeSourceWithConfig; import org.betterx.worlds.together.biomesource.BiomeSourceWithConfig;
import org.betterx.worlds.together.biomesource.ReloadableBiomeSource; import org.betterx.worlds.together.biomesource.ReloadableBiomeSource;
import org.betterx.worlds.together.world.event.WorldBootstrap;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
@ -36,7 +37,8 @@ public class BCLibNetherBiomeSource extends BCLBiomeSource implements BiomeSourc
public static final Codec<BCLibNetherBiomeSource> CODEC = RecordCodecBuilder public static final Codec<BCLibNetherBiomeSource> CODEC = RecordCodecBuilder
.create(instance -> instance .create(instance -> instance
.group( .group(
RegistryOps.retrieveElement(Registries.BIOME), RegistryOps.retrieveGetter(Registries.BIOME),
RegistryOps.retrieveGetter(BCLBiomeRegistry.BCL_BIOMES_REGISTRY),
Codec Codec
.LONG .LONG
.fieldOf("seed") .fieldOf("seed")
@ -56,41 +58,42 @@ public class BCLibNetherBiomeSource extends BCLBiomeSource implements BiomeSourc
private BiomePicker biomePicker; private BiomePicker biomePicker;
private BCLNetherBiomeSourceConfig config; private BCLNetherBiomeSourceConfig config;
public BCLibNetherBiomeSource(
private BCLibNetherBiomeSource( HolderGetter<Biome> biomeRegistry,
Holder.Reference<Registry<Biome>> registryReference, HolderGetter<BCLBiome> bclBiomeRegistry,
long seed, BCLNetherBiomeSourceConfig config
BCLNetherBiomeSourceConfig bclNetherBiomeSourceConfig
) { ) {
this(registryReference.value().asLookup(), seed, bclNetherBiomeSourceConfig); this(biomeRegistry, bclBiomeRegistry, 0, config, false);
}
public BCLibNetherBiomeSource(HolderGetter<Biome> biomeRegistry, BCLNetherBiomeSourceConfig config) {
this(biomeRegistry, 0, config, false);
}
private BCLibNetherBiomeSource(HolderGetter<Biome> biomeRegistry, long seed, BCLNetherBiomeSourceConfig config) {
this(biomeRegistry, seed, config, true);
} }
private BCLibNetherBiomeSource( private BCLibNetherBiomeSource(
HolderGetter<Biome> biomeRegistry, HolderGetter<Biome> biomeRegistry,
HolderGetter<BCLBiome> bclBiomeRegistry,
long seed,
BCLNetherBiomeSourceConfig config
) {
this(biomeRegistry, bclBiomeRegistry, seed, config, true);
}
private BCLibNetherBiomeSource(
HolderGetter<Biome> biomeRegistry,
HolderGetter<BCLBiome> bclBiomeRegistry,
long seed, long seed,
BCLNetherBiomeSourceConfig config, BCLNetherBiomeSourceConfig config,
boolean initMaps boolean initMaps
) { ) {
this(biomeRegistry, getBiomes(biomeRegistry), seed, config, initMaps); this(biomeRegistry, bclBiomeRegistry, getBiomes(biomeRegistry, bclBiomeRegistry), seed, config, initMaps);
} }
private BCLibNetherBiomeSource( private BCLibNetherBiomeSource(
HolderGetter<Biome> biomeRegistry, HolderGetter<Biome> biomeRegistry,
HolderGetter<BCLBiome> bclBiomeRegistry,
List<Holder<Biome>> list, List<Holder<Biome>> list,
long seed, long seed,
BCLNetherBiomeSourceConfig config, BCLNetherBiomeSourceConfig config,
boolean initMaps boolean initMaps
) { ) {
super(biomeRegistry, list, seed); super(biomeRegistry, bclBiomeRegistry, list, seed);
this.config = config; this.config = config;
rebuildBiomePicker(); rebuildBiomePicker();
if (initMaps) { if (initMaps) {
@ -99,20 +102,27 @@ public class BCLibNetherBiomeSource extends BCLBiomeSource implements BiomeSourc
} }
private void rebuildBiomePicker() { private void rebuildBiomePicker() {
biomePicker = new BiomePicker(biomeRegistry); if (WorldBootstrap.getLastRegistryAccess() == null) {
biomePicker = new BiomePicker(null);
return;
}
biomePicker = new BiomePicker(WorldBootstrap.getLastRegistryAccess().lookupOrThrow(Registries.BIOME));
Registry<BCLBiome> bclBiomeRegistry = WorldBootstrap.getLastRegistryAccess()
.registryOrThrow(BCLBiomeRegistry.BCL_BIOMES_REGISTRY);
this.possibleBiomes().forEach(biome -> { this.possibleBiomes().forEach(biome -> {
ResourceLocation biomeID = biome.unwrapKey().orElseThrow().location(); ResourceLocation biomeID = biome.unwrapKey().orElseThrow().location();
if (!biome.isBound()) { if (!biome.isBound()) {
BCLib.LOGGER.warning("Biome " + biomeID.toString() + " is requested but not yet bound."); BCLib.LOGGER.warning("Biome " + biomeID.toString() + " is requested but not yet bound.");
return; return;
} }
if (!BiomeAPI.hasBiome(biomeID)) {
if (!bclBiomeRegistry.containsKey(biomeID)) {
BCLBiome bclBiome = new BCLBiome(biomeID, BiomeAPI.BiomeType.NETHER); BCLBiome bclBiome = new BCLBiome(biomeID, BiomeAPI.BiomeType.NETHER);
InternalBiomeAPI.registerBCLBiomeData(bclBiome); InternalBiomeAPI.registerBCLBiomeData(bclBiome);
biomePicker.addBiome(bclBiome); biomePicker.addBiome(bclBiome);
} else { } else {
BCLBiome bclBiome = BiomeAPI.getBiome(biomeID); BCLBiome bclBiome = bclBiomeRegistry.get(biomeID);
if (!BCLBiomeRegistry.isEmptyBiome(bclBiome)) { if (!BCLBiomeRegistry.isEmptyBiome(bclBiome)) {
if (bclBiome.getParentBiome() == null) { if (bclBiome.getParentBiome() == null) {
@ -126,7 +136,7 @@ public class BCLibNetherBiomeSource extends BCLBiomeSource implements BiomeSourc
} }
protected BCLBiomeSource cloneForDatapack(Set<Holder<Biome>> datapackBiomes) { protected BCLBiomeSource cloneForDatapack(Set<Holder<Biome>> datapackBiomes) {
datapackBiomes.addAll(getNonVanillaBiomes(this.biomeRegistry)); datapackBiomes.addAll(getNonVanillaBiomes(this.biomeRegistry, this.bclBiomeRegistry));
datapackBiomes.addAll(possibleBiomes().stream() datapackBiomes.addAll(possibleBiomes().stream()
.filter(h -> !h.unwrapKey() .filter(h -> !h.unwrapKey()
.orElseThrow() .orElseThrow()
@ -136,6 +146,7 @@ public class BCLibNetherBiomeSource extends BCLBiomeSource implements BiomeSourc
.toList()); .toList());
return new BCLibNetherBiomeSource( return new BCLibNetherBiomeSource(
this.biomeRegistry, this.biomeRegistry,
this.bclBiomeRegistry,
datapackBiomes.stream() datapackBiomes.stream()
.filter(b -> b.unwrapKey() .filter(b -> b.unwrapKey()
.orElse(null) != BCLBiomeRegistry.EMPTY_BIOME.getBiomeKey()) .orElse(null) != BCLBiomeRegistry.EMPTY_BIOME.getBiomeKey())
@ -146,19 +157,31 @@ public class BCLibNetherBiomeSource extends BCLBiomeSource implements BiomeSourc
); );
} }
private static List<Holder<Biome>> getNonVanillaBiomes(HolderGetter<Biome> biomeRegistry) { private static List<Holder<Biome>> getNonVanillaBiomes(
HolderGetter<Biome> biomeRegistry,
HolderGetter<BCLBiome> bclBiomeRegistry
) {
List<String> include = Configs.BIOMES_CONFIG.getIncludeMatching(BiomeAPI.BiomeType.NETHER); List<String> include = Configs.BIOMES_CONFIG.getIncludeMatching(BiomeAPI.BiomeType.NETHER);
List<String> exclude = Configs.BIOMES_CONFIG.getExcludeMatching(BiomeAPI.BiomeType.NETHER); List<String> exclude = Configs.BIOMES_CONFIG.getExcludeMatching(BiomeAPI.BiomeType.NETHER);
return getBiomes(biomeRegistry, exclude, include, BCLibNetherBiomeSource::isValidNonVanillaNetherBiome); return getBiomes(
biomeRegistry,
bclBiomeRegistry,
exclude,
include,
BCLibNetherBiomeSource::isValidNonVanillaNetherBiome
);
} }
private static List<Holder<Biome>> getBiomes(HolderGetter<Biome> biomeRegistry) { private static List<Holder<Biome>> getBiomes(
HolderGetter<Biome> biomeRegistry,
HolderGetter<BCLBiome> bclBiomeRegistry
) {
List<String> include = Configs.BIOMES_CONFIG.getIncludeMatching(BiomeAPI.BiomeType.NETHER); List<String> include = Configs.BIOMES_CONFIG.getIncludeMatching(BiomeAPI.BiomeType.NETHER);
List<String> exclude = Configs.BIOMES_CONFIG.getExcludeMatching(BiomeAPI.BiomeType.NETHER); List<String> exclude = Configs.BIOMES_CONFIG.getExcludeMatching(BiomeAPI.BiomeType.NETHER);
return getBiomes(biomeRegistry, exclude, include, BCLibNetherBiomeSource::isValidNetherBiome); return getBiomes(biomeRegistry, bclBiomeRegistry, exclude, include, BCLibNetherBiomeSource::isValidNetherBiome);
} }

View file

@ -110,7 +110,7 @@ public class BiomePicker {
Registries.BIOME, Registries.BIOME,
bclBiome.getID() bclBiome.getID()
);//biomeRegistry.getResourceKey(biomeRegistry.get(bclBiome.getID())).orElse(null); );//biomeRegistry.getResourceKey(biomeRegistry.get(bclBiome.getID())).orElse(null);
this.biome = key != null ? biomeRegistry.getOrThrow(key) : null; this.biome = (key != null && biomeRegistry != null) ? biomeRegistry.getOrThrow(key) : null;
this.isValid = key != null && biome != null && biome.isBound() && biomeRegistry.get(key).isPresent(); this.isValid = key != null && biome != null && biome.isBound() && biomeRegistry.get(key).isPresent();
bclBiome.forEachSubBiome((b, w) -> { bclBiome.forEachSubBiome((b, w) -> {
if (isAllowed(b)) if (isAllowed(b))

View file

@ -37,7 +37,7 @@ public class LevelGenUtil {
@NotNull @NotNull
public static LevelStem getBCLNetherLevelStem(WorldGenUtil.Context context, BCLNetherBiomeSourceConfig config) { public static LevelStem getBCLNetherLevelStem(WorldGenUtil.Context context, BCLNetherBiomeSourceConfig config) {
BCLibNetherBiomeSource netherSource = new BCLibNetherBiomeSource(context.biomes, config); BCLibNetherBiomeSource netherSource = new BCLibNetherBiomeSource(context.biomes, context.bclBiomes, config);
return new LevelStem( return new LevelStem(
context.dimension, context.dimension,
@ -49,7 +49,7 @@ public class LevelGenUtil {
} }
public static LevelStem getBCLEndLevelStem(WorldGenUtil.Context context, BCLEndBiomeSourceConfig config) { public static LevelStem getBCLEndLevelStem(WorldGenUtil.Context context, BCLEndBiomeSourceConfig config) {
BCLibEndBiomeSource endSource = new BCLibEndBiomeSource(context.biomes, config); BCLibEndBiomeSource endSource = new BCLibEndBiomeSource(context.biomes, context.bclBiomes, config);
return new LevelStem( return new LevelStem(
context.dimension, context.dimension,
new BCLChunkGenerator( new BCLChunkGenerator(

View file

@ -5,7 +5,6 @@ import org.betterx.worlds.together.WorldsTogether;
import org.betterx.worlds.together.world.event.WorldBootstrap; import org.betterx.worlds.together.world.event.WorldBootstrap;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.Lifecycle;
import net.minecraft.core.MappedRegistry; import net.minecraft.core.MappedRegistry;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.core.RegistryAccess; import net.minecraft.core.RegistryAccess;
@ -30,10 +29,7 @@ public class BCLBiomeRegistry {
BCL_BIOME_CODEC_REGISTRY, BCL_BIOME_CODEC_REGISTRY,
BCLBiomeRegistry::bootstrapCodecs BCLBiomeRegistry::bootstrapCodecs
); );
public static MappedRegistry<BCLBiome> BUILTIN_BCL_BIOMES = new MappedRegistry<>( public static MappedRegistry<BCLBiome> BUILTIN_BCL_BIOMES = null;
BCL_BIOMES_REGISTRY,
Lifecycle.stable()
);
/** /**
* Empty biome used as default value if requested biome doesn't exist or linked. Shouldn't be registered anywhere to prevent bugs. * Empty biome used as default value if requested biome doesn't exist or linked. Shouldn't be registered anywhere to prevent bugs.
@ -76,6 +72,7 @@ public class BCLBiomeRegistry {
*/ */
@ApiStatus.Internal @ApiStatus.Internal
public static ResourceKey<BCLBiome> register(RegistryAccess access, BCLBiome biome) { public static ResourceKey<BCLBiome> register(RegistryAccess access, BCLBiome biome) {
if (access != null && BUILTIN_BCL_BIOMES == null) return biome.getBCLBiomeKey();
Registry.register( Registry.register(
access == null ? BUILTIN_BCL_BIOMES : access.registryOrThrow(BCL_BIOMES_REGISTRY), access == null ? BUILTIN_BCL_BIOMES : access.registryOrThrow(BCL_BIOMES_REGISTRY),
biome.getBCLBiomeKey(), biome.getBCLBiomeKey(),
@ -134,7 +131,9 @@ public class BCLBiomeRegistry {
} }
public static BCLBiome get(@Nullable RegistryAccess access, ResourceLocation loc) { public static BCLBiome get(@Nullable RegistryAccess access, ResourceLocation loc) {
return getBclBiomesRegistry(access).get(loc); var reg = getBclBiomesRegistry(access);
if (reg == null) return null;
return reg.get(loc);
} }
public static BCLBiome getOrElseEmpty(ResourceLocation loc) { public static BCLBiome getOrElseEmpty(ResourceLocation loc) {

View file

@ -1,5 +1,6 @@
package org.betterx.bclib.mixin.common; package org.betterx.bclib.mixin.common;
import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry;
import com.mojang.serialization.Lifecycle; import com.mojang.serialization.Lifecycle;
@ -29,11 +30,17 @@ public abstract class BuiltinRegistriesMixin {
//this needs to be added BEFORE the WORLD_PRESET-Registry. Otherwise decoding will fail! //this needs to be added BEFORE the WORLD_PRESET-Registry. Otherwise decoding will fail!
@Inject(method = "<clinit>", at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/core/registries/BuiltInRegistries;registerSimple(Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/core/registries/BuiltInRegistries$RegistryBootstrap;)Lnet/minecraft/core/Registry;")) @Inject(method = "<clinit>", at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/core/registries/BuiltInRegistries;registerSimple(Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/core/registries/BuiltInRegistries$RegistryBootstrap;)Lnet/minecraft/core/Registry;"))
private static void bcl_registerBuiltin(CallbackInfo ci) { private static void bcl_registerBuiltin(CallbackInfo ci) {
BCLBiomeRegistry.BUILTIN_BCL_BIOMES = internalRegister( BCLBiomeRegistry.ensureStaticallyLoaded();
BCLBiomeRegistry.BCL_BIOMES_REGISTRY, if (BCLib.isDatagen()) {
BCLBiomeRegistry.BUILTIN_BCL_BIOMES, // BCLBiomeRegistry.BUILTIN_BCL_BIOMES = internalRegister(
BCLBiomeRegistry::bootstrap, // BCLBiomeRegistry.BCL_BIOMES_REGISTRY,
Lifecycle.stable() // new MappedRegistry<>(
); // BCLBiomeRegistry.BCL_BIOMES_REGISTRY,
// Lifecycle.stable()
// ),
// BCLBiomeRegistry::bootstrap,
// Lifecycle.stable()
// );
}
} }
} }

View file

@ -1,132 +1,22 @@
package org.betterx.bclib.registry; package org.betterx.bclib.registry;
import org.betterx.bclib.BCLib; 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;
import org.betterx.bclib.config.Configs; import org.betterx.bclib.config.Configs;
import org.betterx.worlds.together.entrypoints.WorldPresetBootstrap;
import org.betterx.worlds.together.levelgen.WorldGenUtil;
import org.betterx.worlds.together.worldPreset.TogetherWorldPreset;
import org.betterx.worlds.together.worldPreset.WorldPresets; import org.betterx.worlds.together.worldPreset.WorldPresets;
import net.minecraft.core.Holder;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.levelgen.presets.WorldPreset;
import java.util.Map; public class PresetsRegistry {
public class PresetsRegistry implements WorldPresetBootstrap {
public static ResourceKey<WorldPreset> BCL_WORLD = WorldPresets.createKey(BCLib.makeID("normal")); public static ResourceKey<WorldPreset> BCL_WORLD = WorldPresets.createKey(BCLib.makeID("normal"));
public static ResourceKey<WorldPreset> BCL_WORLD_LARGE = WorldPresets.createKey(BCLib.makeID("large")); public static ResourceKey<WorldPreset> BCL_WORLD_LARGE = WorldPresets.createKey(BCLib.makeID("large"));
public static ResourceKey<WorldPreset> BCL_WORLD_AMPLIFIED = WorldPresets.createKey(BCLib.makeID("amplified")); public static ResourceKey<WorldPreset> BCL_WORLD_AMPLIFIED = WorldPresets.createKey(BCLib.makeID("amplified"));
public static ResourceKey<WorldPreset> BCL_WORLD_17 = WorldPresets.createKey(BCLib.makeID("legacy_17")); public static ResourceKey<WorldPreset> BCL_WORLD_17 = WorldPresets.createKey(BCLib.makeID("legacy_17"));
public void bootstrapWorldPresets() { public static void register() {
WorldPresets.register(
BCL_WORLD,
(overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) ->
buildPreset(
overworldStem,
netherContext, BCLNetherBiomeSourceConfig.DEFAULT,
endContext, BCLEndBiomeSourceConfig.DEFAULT
),
true
);
WorldPresets.register(
BCL_WORLD_LARGE,
(overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> {
Holder<NoiseGeneratorSettings> largeBiomeGenerator = noiseSettings
.getOrThrow(NoiseGeneratorSettings.LARGE_BIOMES);
return buildPreset(
noiseBasedOverworld.make(
overworldStem.generator().getBiomeSource(),
largeBiomeGenerator
),
netherContext, BCLNetherBiomeSourceConfig.MINECRAFT_18_LARGE,
endContext, BCLEndBiomeSourceConfig.MINECRAFT_18_LARGE
);
},
true
);
WorldPresets.register(
BCL_WORLD_AMPLIFIED,
(overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> {
Holder<NoiseGeneratorSettings> amplifiedBiomeGenerator = noiseSettings
.getOrThrow(NoiseGeneratorSettings.AMPLIFIED);
WorldGenUtil.Context amplifiedNetherContext = new WorldGenUtil.Context(
netherContext.biomes,
netherContext.dimension,
netherContext.structureSets,
noiseSettings.getOrThrow(BCLChunkGenerator.AMPLIFIED_NETHER)
);
return buildPreset(
noiseBasedOverworld.make(
overworldStem.generator().getBiomeSource(),
amplifiedBiomeGenerator
),
amplifiedNetherContext, BCLNetherBiomeSourceConfig.MINECRAFT_18_AMPLIFIED,
endContext, BCLEndBiomeSourceConfig.MINECRAFT_18_AMPLIFIED
);
},
true
);
WorldPresets.register(
BCL_WORLD_17,
(overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) ->
buildPreset(
overworldStem,
netherContext,
BCLNetherBiomeSourceConfig.MINECRAFT_17, endContext,
BCLEndBiomeSourceConfig.MINECRAFT_17
),
false
);
if (Configs.CLIENT_CONFIG.forceBetterXPreset()) if (Configs.CLIENT_CONFIG.forceBetterXPreset())
WorldPresets.setDEFAULT(BCL_WORLD); WorldPresets.setDEFAULT(BCL_WORLD);
else else
WorldPresets.setDEFAULT(net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL); WorldPresets.setDEFAULT(net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL);
} }
public static TogetherWorldPreset buildPreset(
LevelStem overworldStem,
WorldGenUtil.Context netherContext,
BCLNetherBiomeSourceConfig netherConfig,
WorldGenUtil.Context endContext,
BCLEndBiomeSourceConfig endConfig
) {
return new TogetherWorldPreset(buildDimensionMap(
overworldStem,
netherContext,
netherConfig, endContext,
endConfig
), 1000);
}
public static Map<ResourceKey<LevelStem>, LevelStem> buildDimensionMap(
LevelStem overworldStem,
WorldGenUtil.Context netherContext,
BCLNetherBiomeSourceConfig netherConfig,
WorldGenUtil.Context endContext,
BCLEndBiomeSourceConfig endConfig
) {
return Map.of(
LevelStem.OVERWORLD,
overworldStem,
LevelStem.NETHER,
LevelGenUtil.getBCLNetherLevelStem(netherContext, netherConfig),
LevelStem.END,
LevelGenUtil.getBCLEndLevelStem(endContext, endConfig)
);
}
} }

View file

@ -1,6 +1,14 @@
package org.betterx.bclib.datagen; package org.betterx.datagen.bclib;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.datagen.bclib.preset.WorldPresetDataProvider;
import org.betterx.datagen.bclib.tests.TestBiomes;
import org.betterx.datagen.bclib.tests.TestConfiguredFeatures;
import org.betterx.datagen.bclib.tests.TestPlacedFeatures;
import org.betterx.datagen.bclib.tests.TestWorldgenProvider;
import org.betterx.datagen.bclib.worldgen.BCLibRegistriesDataProvider;
import org.betterx.datagen.bclib.worldgen.NoiseTypesDataProvider;
import org.betterx.datagen.bclib.worldgen.WorldgenRegistriesDataProvider;
import net.minecraft.core.RegistrySetBuilder; import net.minecraft.core.RegistrySetBuilder;
import net.minecraft.core.registries.Registries; import net.minecraft.core.registries.Registries;
@ -9,7 +17,7 @@ import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
public class BCLibDatagen implements DataGeneratorEntrypoint { public class BCLibDatagen implements DataGeneratorEntrypoint {
static boolean ADD_TESTS = true; public static final boolean ADD_TESTS = true;
@Override @Override
public void onInitializeDataGenerator(FabricDataGenerator dataGenerator) { public void onInitializeDataGenerator(FabricDataGenerator dataGenerator) {
@ -19,10 +27,10 @@ public class BCLibDatagen implements DataGeneratorEntrypoint {
if (ADD_TESTS) { if (ADD_TESTS) {
pack.addProvider(TestWorldgenProvider::new); pack.addProvider(TestWorldgenProvider::new);
} }
pack.addProvider(WorldgenProvider::new);
//pack.addProvider(BiomeProvider::new); pack.addProvider(WorldgenRegistriesDataProvider::new);
//pack.addProvider(new BiomeProvider()); pack.addProvider(WorldPresetDataProvider::new);
pack.addProvider(CustomRegistriesDataProvider::new); pack.addProvider(BCLibRegistriesDataProvider::new);
} }
@Override @Override
@ -33,6 +41,7 @@ public class BCLibDatagen implements DataGeneratorEntrypoint {
registryBuilder.add(Registries.PLACED_FEATURE, TestPlacedFeatures::bootstrap); registryBuilder.add(Registries.PLACED_FEATURE, TestPlacedFeatures::bootstrap);
} }
registryBuilder.add(Registries.BIOME, TestBiomes::bootstrap); registryBuilder.add(Registries.BIOME, TestBiomes::bootstrap);
registryBuilder.add(Registries.NOISE_SETTINGS, NoiseDatagen::bootstrap); registryBuilder.add(Registries.NOISE_SETTINGS, NoiseTypesDataProvider::bootstrap);
registryBuilder.add(Registries.WORLD_PRESET, WorldPresetDataProvider::bootstrap);
} }
} }

View file

@ -0,0 +1,143 @@
package org.betterx.datagen.bclib.preset;
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;
import org.betterx.bclib.registry.PresetsRegistry;
import org.betterx.worlds.together.levelgen.WorldGenUtil;
import org.betterx.worlds.together.worldPreset.TogetherWorldPreset;
import org.betterx.worlds.together.worldPreset.WorldPresets;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.worldgen.BootstapContext;
import net.minecraft.resources.ResourceKey;
import net.minecraft.tags.WorldPresetTags;
import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
import net.minecraft.world.level.levelgen.presets.WorldPreset;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
public class WorldPresetDataProvider extends FabricTagProvider<WorldPreset> {
/**
* Constructs a new {@link FabricTagProvider} with the default computed path.
*
* <p>Common implementations of this class are provided.
*
* @param output the {@link FabricDataOutput} instance
* @param registriesFuture the backing registry for the tag type
*/
public WorldPresetDataProvider(
FabricDataOutput output,
CompletableFuture<HolderLookup.Provider> registriesFuture
) {
super(output, Registries.WORLD_PRESET, registriesFuture);
}
public static void bootstrap(BootstapContext<WorldPreset> bootstrapContext) {
final WorldPresets.BootstrapData ctx = new WorldPresets.BootstrapData(bootstrapContext);
bootstrapContext.register(PresetsRegistry.BCL_WORLD, createNormal(ctx));
bootstrapContext.register(PresetsRegistry.BCL_WORLD_LARGE, createLarge(ctx));
bootstrapContext.register(PresetsRegistry.BCL_WORLD_AMPLIFIED, createAmplified(ctx));
bootstrapContext.register(PresetsRegistry.BCL_WORLD_17, createLegacy(ctx));
}
private static WorldPreset createLegacy(WorldPresets.BootstrapData ctx) {
return buildPreset(
ctx.overworldStem,
ctx.netherContext,
BCLNetherBiomeSourceConfig.MINECRAFT_17, ctx.endContext,
BCLEndBiomeSourceConfig.MINECRAFT_17
);
}
private static WorldPreset createAmplified(WorldPresets.BootstrapData ctx) {
Holder<NoiseGeneratorSettings> amplifiedBiomeGenerator = ctx.noiseSettings
.getOrThrow(NoiseGeneratorSettings.AMPLIFIED);
WorldGenUtil.Context amplifiedNetherContext = new WorldGenUtil.Context(
ctx.netherContext.biomes,
ctx.netherContext.bclBiomes,
ctx.netherContext.dimension,
ctx.netherContext.structureSets,
ctx.noiseSettings.getOrThrow(BCLChunkGenerator.AMPLIFIED_NETHER)
);
return buildPreset(
ctx.makeNoiseBasedOverworld(
ctx.overworldStem.generator().getBiomeSource(),
amplifiedBiomeGenerator
),
amplifiedNetherContext, BCLNetherBiomeSourceConfig.MINECRAFT_18_AMPLIFIED,
ctx.endContext, BCLEndBiomeSourceConfig.MINECRAFT_18_AMPLIFIED
);
}
private static WorldPreset createLarge(WorldPresets.BootstrapData ctx) {
Holder<NoiseGeneratorSettings> largeBiomeGenerator = ctx.noiseSettings
.getOrThrow(NoiseGeneratorSettings.LARGE_BIOMES);
return buildPreset(
ctx.makeNoiseBasedOverworld(
ctx.overworldStem.generator().getBiomeSource(),
largeBiomeGenerator
),
ctx.netherContext, BCLNetherBiomeSourceConfig.MINECRAFT_18_LARGE,
ctx.endContext, BCLEndBiomeSourceConfig.MINECRAFT_18_LARGE
);
}
private static WorldPreset createNormal(WorldPresets.BootstrapData ctx) {
return buildPreset(
ctx.overworldStem,
ctx.netherContext, BCLNetherBiomeSourceConfig.DEFAULT,
ctx.endContext, BCLEndBiomeSourceConfig.DEFAULT
);
}
private static TogetherWorldPreset buildPreset(
LevelStem overworldStem,
WorldGenUtil.Context netherContext,
BCLNetherBiomeSourceConfig netherConfig,
WorldGenUtil.Context endContext,
BCLEndBiomeSourceConfig endConfig
) {
return new TogetherWorldPreset(buildDimensionMap(
overworldStem, netherContext, netherConfig, endContext, endConfig
), 1000);
}
public static Map<ResourceKey<LevelStem>, LevelStem> buildDimensionMap(
LevelStem overworldStem,
WorldGenUtil.Context netherContext,
BCLNetherBiomeSourceConfig netherConfig,
WorldGenUtil.Context endContext,
BCLEndBiomeSourceConfig endConfig
) {
return Map.of(
LevelStem.OVERWORLD,
overworldStem,
LevelStem.NETHER,
LevelGenUtil.getBCLNetherLevelStem(netherContext, netherConfig),
LevelStem.END,
LevelGenUtil.getBCLEndLevelStem(endContext, endConfig)
);
}
@Override
protected void addTags(HolderLookup.Provider arg) {
final FabricTagProvider<WorldPreset>.FabricTagBuilder builder = getOrCreateTagBuilder(WorldPresetTags.NORMAL);
builder.add(PresetsRegistry.BCL_WORLD);
builder.add(PresetsRegistry.BCL_WORLD_AMPLIFIED);
builder.add(PresetsRegistry.BCL_WORLD_LARGE);
}
}

View file

@ -1,9 +1,10 @@
package org.betterx.bclib.datagen; package org.betterx.datagen.bclib.tests;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome;
import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder;
import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeContainer; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeContainer;
import org.betterx.datagen.bclib.BCLibDatagen;
import net.minecraft.data.worldgen.BootstapContext; import net.minecraft.data.worldgen.BootstapContext;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;

View file

@ -1,8 +1,9 @@
package org.betterx.bclib.datagen; package org.betterx.datagen.bclib.tests;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.v3.levelgen.features.BCLConfigureFeature; import org.betterx.bclib.api.v3.levelgen.features.BCLConfigureFeature;
import org.betterx.bclib.api.v3.levelgen.features.BCLFeatureBuilder; import org.betterx.bclib.api.v3.levelgen.features.BCLFeatureBuilder;
import org.betterx.datagen.bclib.BCLibDatagen;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.registries.Registries; import net.minecraft.core.registries.Registries;
@ -27,7 +28,7 @@ public class TestConfiguredFeatures {
Registries.CONFIGURED_FEATURE, Registries.CONFIGURED_FEATURE,
YELLOW_FEATURE.id YELLOW_FEATURE.id
)); ));
BCLib.LOGGER.info("Bootstrap CONFIGUREDFeatures" + holder); BCLib.LOGGER.info("Bootstrap CONFIGUREDFeatures" + holder);
if (BCLibDatagen.ADD_TESTS && BCLib.isDevEnvironment()) { if (BCLibDatagen.ADD_TESTS && BCLib.isDevEnvironment()) {
//YELLOW_FEATURE = YELLOW_FEATURE.register(bootstrapContext); //YELLOW_FEATURE = YELLOW_FEATURE.register(bootstrapContext);

View file

@ -1,7 +1,8 @@
package org.betterx.bclib.datagen; package org.betterx.datagen.bclib.tests;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.v3.levelgen.features.BCLFeature; import org.betterx.bclib.api.v3.levelgen.features.BCLFeature;
import org.betterx.datagen.bclib.BCLibDatagen;
import net.minecraft.data.worldgen.BootstapContext; import net.minecraft.data.worldgen.BootstapContext;
import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.GenerationStep;

View file

@ -1,4 +1,6 @@
package org.betterx.bclib.datagen; package org.betterx.datagen.bclib.tests;
import org.betterx.datagen.bclib.BCLibDatagen;
import net.minecraft.core.HolderLookup; import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries; import net.minecraft.core.registries.Registries;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.datagen; package org.betterx.datagen.bclib.worldgen;
import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry;
import org.betterx.bclib.api.v2.levelgen.biomes.BiomeData; import org.betterx.bclib.api.v2.levelgen.biomes.BiomeData;
@ -29,13 +29,14 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
public class CustomRegistriesDataProvider implements DataProvider { public class BCLibRegistriesDataProvider implements DataProvider {
public static final List<RegistryDataLoader.RegistryData<?>> REGISTRIES = List.of( public static final List<RegistryDataLoader.RegistryData<?>> REGISTRIES = List.of(
new RegistryDataLoader.RegistryData<>(BCLBiomeRegistry.BCL_BIOMES_REGISTRY, BiomeData.CODEC), new RegistryDataLoader.RegistryData<>(BCLBiomeRegistry.BCL_BIOMES_REGISTRY, BiomeData.CODEC),
new RegistryDataLoader.RegistryData<>( new RegistryDataLoader.RegistryData<>(
SurfaceRuleRegistry.SURFACE_RULES_REGISTRY, SurfaceRuleRegistry.SURFACE_RULES_REGISTRY,
AssignedSurfaceRule.CODEC AssignedSurfaceRule.CODEC
) )
//new RegistryDataLoader.RegistryData<>(Registries.WORLD_PRESET, WorldPreset.DIRECT_CODEC)
// new RegistryDataLoader.RegistryData<>(Registries.BIOME, Biome.DIRECT_CODEC), // new RegistryDataLoader.RegistryData<>(Registries.BIOME, Biome.DIRECT_CODEC),
// new RegistryDataLoader.RegistryData<>(Registries.CONFIGURED_FEATURE, ConfiguredFeature.DIRECT_CODEC), // new RegistryDataLoader.RegistryData<>(Registries.CONFIGURED_FEATURE, ConfiguredFeature.DIRECT_CODEC),
// new RegistryDataLoader.RegistryData<>(Registries.PLACED_FEATURE, PlacedFeature.DIRECT_CODEC), // new RegistryDataLoader.RegistryData<>(Registries.PLACED_FEATURE, PlacedFeature.DIRECT_CODEC),
@ -45,7 +46,7 @@ public class CustomRegistriesDataProvider implements DataProvider {
private final PackOutput output; private final PackOutput output;
public CustomRegistriesDataProvider(FabricDataOutput generator) { public BCLibRegistriesDataProvider(FabricDataOutput generator) {
this.output = generator; this.output = generator;
} }

View file

@ -1,11 +1,11 @@
package org.betterx.bclib.datagen; package org.betterx.datagen.bclib.worldgen;
import org.betterx.bclib.api.v2.generator.BCLChunkGenerator; import org.betterx.bclib.api.v2.generator.BCLChunkGenerator;
import net.minecraft.data.worldgen.BootstapContext; import net.minecraft.data.worldgen.BootstapContext;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
public class NoiseDatagen { public class NoiseTypesDataProvider {
public static void bootstrap(BootstapContext<NoiseGeneratorSettings> bootstrapContext) { public static void bootstrap(BootstapContext<NoiseGeneratorSettings> bootstrapContext) {
bootstrapContext.register( bootstrapContext.register(
BCLChunkGenerator.AMPLIFIED_NETHER, BCLChunkGenerator.AMPLIFIED_NETHER,

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.datagen; package org.betterx.datagen.bclib.worldgen;
import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry;
import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry; import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry;
@ -11,8 +11,8 @@ import net.fabricmc.fabric.api.datagen.v1.provider.FabricDynamicRegistryProvider
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
public class WorldgenProvider extends FabricDynamicRegistryProvider { public class WorldgenRegistriesDataProvider extends FabricDynamicRegistryProvider {
public WorldgenProvider( public WorldgenRegistriesDataProvider(
FabricDataOutput output, FabricDataOutput output,
CompletableFuture<HolderLookup.Provider> registriesFuture CompletableFuture<HolderLookup.Provider> registriesFuture
) { ) {

View file

@ -1,5 +0,0 @@
package org.betterx.worlds.together.entrypoints;
public interface WorldPresetBootstrap extends WorldsTogetherEntrypoint {
void bootstrapWorldPresets();
}

View file

@ -1,5 +1,6 @@
package org.betterx.worlds.together.levelgen; package org.betterx.worlds.together.levelgen;
import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome;
import org.betterx.worlds.together.WorldsTogether; import org.betterx.worlds.together.WorldsTogether;
import org.betterx.worlds.together.biomesource.BiomeSourceWithConfig; import org.betterx.worlds.together.biomesource.BiomeSourceWithConfig;
import org.betterx.worlds.together.biomesource.ReloadableBiomeSource; import org.betterx.worlds.together.biomesource.ReloadableBiomeSource;
@ -100,15 +101,18 @@ public class WorldGenUtil {
public static class Context extends StemContext { public static class Context extends StemContext {
public final HolderGetter<Biome> biomes; public final HolderGetter<Biome> biomes;
public final HolderGetter<BCLBiome> bclBiomes;
public Context( public Context(
HolderGetter<Biome> biomes, HolderGetter<Biome> biomes,
HolderGetter<BCLBiome> bclBiomes,
Holder<DimensionType> dimension, Holder<DimensionType> dimension,
HolderGetter<StructureSet> structureSets, HolderGetter<StructureSet> structureSets,
Holder<NoiseGeneratorSettings> generatorSettings Holder<NoiseGeneratorSettings> generatorSettings
) { ) {
super(dimension, structureSets, generatorSettings); super(dimension, structureSets, generatorSettings);
this.biomes = biomes; this.biomes = biomes;
this.bclBiomes = bclBiomes;
} }
} }

View file

@ -20,8 +20,6 @@ import java.util.function.Function;
@Mixin(WorldPreset.class) @Mixin(WorldPreset.class)
public class WorldPresetMixin { public class WorldPresetMixin {
@ModifyArg(method = "<clinit>", at = @At(value = "INVOKE", target = "Lcom/mojang/serialization/codecs/RecordCodecBuilder;create(Ljava/util/function/Function;)Lcom/mojang/serialization/Codec;")) @ModifyArg(method = "<clinit>", at = @At(value = "INVOKE", target = "Lcom/mojang/serialization/codecs/RecordCodecBuilder;create(Ljava/util/function/Function;)Lcom/mojang/serialization/Codec;"))
private static Function<RecordCodecBuilder.Instance<WorldPreset>, ? extends App<RecordCodecBuilder.Mu<WorldPreset>, WorldPreset>> foo( private static Function<RecordCodecBuilder.Instance<WorldPreset>, ? extends App<RecordCodecBuilder.Mu<WorldPreset>, WorldPreset>> foo(
Function<RecordCodecBuilder.Instance<WorldPreset>, ? extends App<RecordCodecBuilder.Mu<WorldPreset>, WorldPreset>> builder Function<RecordCodecBuilder.Instance<WorldPreset>, ? extends App<RecordCodecBuilder.Mu<WorldPreset>, WorldPreset>> builder

View file

@ -1,97 +0,0 @@
package org.betterx.worlds.together.mixin.common;
import org.betterx.worlds.together.levelgen.WorldGenUtil;
import org.betterx.worlds.together.worldPreset.WorldPresets;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderGetter;
import net.minecraft.data.worldgen.BootstapContext;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.BiomeSource;
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.placement.PlacedFeature;
import net.minecraft.world.level.levelgen.presets.WorldPreset;
import net.minecraft.world.level.levelgen.structure.StructureSet;
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.ModifyArg;
@Mixin(net.minecraft.world.level.levelgen.presets.WorldPresets.Bootstrap.class)
public abstract class WorldPresetsBootstrapMixin {
@Shadow
@Final
private HolderGetter<Biome> biomes;
@Shadow
@Final
private HolderGetter<StructureSet> structureSets;
@Shadow
@Final
private BootstapContext<WorldPreset> context;
@Shadow
@Final
private HolderGetter<PlacedFeature> placedFeatures;
@Shadow
@Final
private LevelStem netherStem;
@Shadow
@Final
private LevelStem endStem;
//see WorldPresets.register
@Shadow
protected abstract LevelStem makeNoiseBasedOverworld(
BiomeSource biomeSource,
Holder<NoiseGeneratorSettings> holder
);
@Shadow
@Final
private HolderGetter<NoiseGeneratorSettings> noiseSettings;
@ModifyArg(method = "run", at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/world/level/levelgen/presets/WorldPresets$Bootstrap;registerCustomOverworldPreset(Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/level/dimension/LevelStem;)V"))
private LevelStem bcl_getOverworldStem(LevelStem overworldStem) {
Holder<NoiseGeneratorSettings> netherSettings, endSettings;
if (this.netherStem.generator() instanceof NoiseBasedChunkGenerator nether) {
netherSettings = nether.generatorSettings();
} else {
netherSettings = this.noiseSettings.getOrThrow(NoiseGeneratorSettings.NETHER);
}
if (this.endStem.generator() instanceof NoiseBasedChunkGenerator nether) {
endSettings = nether.generatorSettings();
} else {
endSettings = this.noiseSettings.getOrThrow(NoiseGeneratorSettings.END);
}
WorldGenUtil.Context netherContext = new WorldGenUtil.Context(
this.biomes,
this.netherStem.type(),
this.structureSets,
netherSettings
);
WorldGenUtil.Context endContext = new WorldGenUtil.Context(
this.biomes,
this.endStem.type(),
this.structureSets,
endSettings
);
WorldPresets.bootstrapPresets(
context,
overworldStem,
netherContext,
endContext,
noiseSettings,
this::makeNoiseBasedOverworld
);
return overworldStem;
}
}

View file

@ -1,12 +1,8 @@
package org.betterx.worlds.together.worldPreset; package org.betterx.worlds.together.worldPreset;
import org.betterx.worlds.together.WorldsTogether; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome;
import org.betterx.worlds.together.entrypoints.EntrypointUtil; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry;
import org.betterx.worlds.together.entrypoints.WorldPresetBootstrap;
import org.betterx.worlds.together.levelgen.WorldGenUtil; import org.betterx.worlds.together.levelgen.WorldGenUtil;
import org.betterx.worlds.together.tag.v3.TagManager;
import org.betterx.worlds.together.tag.v3.TagRegistry;
import org.betterx.worlds.together.worldPreset.client.WorldPresetsClient;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.HolderGetter; import net.minecraft.core.HolderGetter;
@ -15,28 +11,23 @@ import net.minecraft.core.registries.Registries;
import net.minecraft.data.worldgen.BootstapContext; import net.minecraft.data.worldgen.BootstapContext;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.WorldPresetTags; import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.biome.BiomeSource;
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.dimension.BuiltinDimensionTypes;
import net.minecraft.world.level.dimension.DimensionType;
import net.minecraft.world.level.dimension.LevelStem; 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.NoiseGeneratorSettings;
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.levelgen.presets.WorldPreset;
import net.minecraft.world.level.levelgen.structure.StructureSet;
import com.google.common.collect.Maps;
import java.util.Map;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
public class WorldPresets { public class WorldPresets {
@FunctionalInterface
public interface OverworldBuilder {
LevelStem make(BiomeSource biomeSource, Holder<NoiseGeneratorSettings> noiseGeneratorSettings);
}
private static Map<ResourceKey<WorldPreset>, PresetBuilder> BUILDERS = Maps.newHashMap();
public static final TagRegistry.UnTyped<WorldPreset> WORLD_PRESETS =
TagManager.registerType(Registries.WORLD_PRESET, "tags/worldgen/world_preset");
private static ResourceKey<WorldPreset> DEFAULT = net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL; private static ResourceKey<WorldPreset> DEFAULT = net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL;
public static Holder<WorldPreset> get(RegistryAccess access, ResourceKey<WorldPreset> key) { public static Holder<WorldPreset> get(RegistryAccess access, ResourceKey<WorldPreset> key) {
@ -45,28 +36,6 @@ public class WorldPresets {
.getHolderOrThrow(key); .getHolderOrThrow(key);
} }
/**
* Registers a custom WorldPreset (with custom rules and behaviour)
* <p>
* See also {@link WorldPresetsClient} if you need to add a Customize Button/Screen
* for your preset
*
* @param loc The ID of your Preset
* @param visibleInUI if true, the preset will show up in the UI on world creataion
* @return The key you may use to reference your new Preset
*/
private static ResourceKey<WorldPreset> register(ResourceKey<WorldPreset> key, boolean visibleInUI) {
//ResourceKey<WorldPreset> key = ResourceKey.create(Registries.WORLD_PRESET, loc);
if (visibleInUI) {
if (!didExplicitlySetDefault && DEFAULT == net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL) {
DEFAULT = key;
}
WORLD_PRESETS.addUntyped(WorldPresetTags.NORMAL, key.location());
}
return key;
}
public static void ensureStaticallyLoaded() { public static void ensureStaticallyLoaded() {
} }
@ -75,68 +44,99 @@ public class WorldPresets {
return ResourceKey.create(Registries.WORLD_PRESET, loc); return ResourceKey.create(Registries.WORLD_PRESET, loc);
} }
public static ResourceKey<WorldPreset> register(
ResourceKey<WorldPreset> loc,
PresetBuilder builder,
boolean visibleInUI
) {
ResourceKey<WorldPreset> key = register(loc, visibleInUI);
if (BUILDERS == null) {
WorldsTogether.LOGGER.error("Unable to register WorldPreset '" + loc + "'.");
} else {
BUILDERS.put(key, builder);
}
return key;
}
@ApiStatus.Internal
public static void bootstrapPresets(
BootstapContext<WorldPreset> bootstrapContext,
LevelStem overworldStem,
WorldGenUtil.Context netherContext,
WorldGenUtil.Context endContext,
HolderGetter<NoiseGeneratorSettings> noiseSettings,
OverworldBuilder noiseBasedOverworld
) {
if (BUILDERS == null)
return;
EntrypointUtil.getCommon(WorldPresetBootstrap.class)
.forEach(e -> e.bootstrapWorldPresets());
for (Map.Entry<ResourceKey<WorldPreset>, PresetBuilder> e : BUILDERS.entrySet()) {
TogetherWorldPreset preset = e.getValue()
.create(
overworldStem, netherContext, endContext,
noiseSettings, noiseBasedOverworld
);
bootstrapContext.register(e.getKey(), preset);
}
BUILDERS = null;
}
public static ResourceKey<WorldPreset> getDEFAULT() { public static ResourceKey<WorldPreset> getDEFAULT() {
return DEFAULT; return DEFAULT;
} }
private static boolean didExplicitlySetDefault = false;
@ApiStatus.Internal @ApiStatus.Internal
public static void setDEFAULT(ResourceKey<WorldPreset> DEFAULT) { public static void setDEFAULT(ResourceKey<WorldPreset> DEFAULT) {
didExplicitlySetDefault = true;
WorldPresets.DEFAULT = DEFAULT; WorldPresets.DEFAULT = DEFAULT;
} }
public static class BootstrapData {
public final HolderGetter<NoiseGeneratorSettings> noiseSettings;
public final HolderGetter<Biome> biomes;
public final HolderGetter<PlacedFeature> placedFeatures;
public final HolderGetter<StructureSet> structureSets;
public final LevelStem netherStem;
public final LevelStem endStem;
public final LevelStem overworldStem;
public final Holder<DimensionType> netherDimensionType;
public final Holder<DimensionType> endDimensionType;
public final Holder<DimensionType> overworldDimensionType;
@FunctionalInterface public final WorldGenUtil.Context netherContext;
public interface PresetBuilder { public final WorldGenUtil.Context endContext;
TogetherWorldPreset create(
LevelStem overworldStem, public BootstrapData(BootstapContext<WorldPreset> bootstapContext) {
WorldGenUtil.Context netherContext, final HolderGetter<DimensionType> dimensionTypes = bootstapContext.lookup(Registries.DIMENSION_TYPE);
WorldGenUtil.Context endContext,
HolderGetter<NoiseGeneratorSettings> noiseSettings, this.noiseSettings = bootstapContext.lookup(Registries.NOISE_SETTINGS);
OverworldBuilder noiseBasedOverworld this.biomes = bootstapContext.lookup(Registries.BIOME);
); this.placedFeatures = bootstapContext.lookup(Registries.PLACED_FEATURE);
this.structureSets = bootstapContext.lookup(Registries.STRUCTURE_SET);
this.overworldDimensionType = dimensionTypes.getOrThrow(BuiltinDimensionTypes.OVERWORLD);
MultiNoiseBiomeSource overworldBiomeSource = MultiNoiseBiomeSource.Preset.OVERWORLD.biomeSource(this.biomes);
Holder<NoiseGeneratorSettings> defaultOverworldNoise = this.noiseSettings.getOrThrow(NoiseGeneratorSettings.OVERWORLD);
this.overworldStem = makeNoiseBasedOverworld(overworldBiomeSource, defaultOverworldNoise);
this.netherDimensionType = dimensionTypes.getOrThrow(BuiltinDimensionTypes.NETHER);
Holder<NoiseGeneratorSettings> defaultNetherNoise = this.noiseSettings.getOrThrow(NoiseGeneratorSettings.NETHER);
this.netherStem = new LevelStem(
netherDimensionType,
new NoiseBasedChunkGenerator(
MultiNoiseBiomeSource.Preset.NETHER.biomeSource(this.biomes),
defaultNetherNoise
)
);
this.endDimensionType = dimensionTypes.getOrThrow(BuiltinDimensionTypes.END);
Holder<NoiseGeneratorSettings> defaultEndNoise = this.noiseSettings.getOrThrow(NoiseGeneratorSettings.END);
this.endStem = new LevelStem(
endDimensionType,
new NoiseBasedChunkGenerator(TheEndBiomeSource.create(this.biomes), defaultEndNoise)
);
Holder<NoiseGeneratorSettings> netherSettings, endSettings;
if (this.netherStem.generator() instanceof NoiseBasedChunkGenerator nether) {
netherSettings = nether.generatorSettings();
} else {
netherSettings = this.noiseSettings.getOrThrow(NoiseGeneratorSettings.NETHER);
}
if (this.endStem.generator() instanceof NoiseBasedChunkGenerator nether) {
endSettings = nether.generatorSettings();
} else {
endSettings = this.noiseSettings.getOrThrow(NoiseGeneratorSettings.END);
}
HolderGetter<BCLBiome> bclBiomes = bootstapContext.lookup(BCLBiomeRegistry.BCL_BIOMES_REGISTRY);
this.netherContext = new WorldGenUtil.Context(
this.biomes,
bclBiomes,
this.netherStem.type(),
this.structureSets,
netherSettings
);
this.endContext = new WorldGenUtil.Context(
this.biomes,
bclBiomes,
this.endStem.type(),
this.structureSets,
endSettings
);
}
private LevelStem makeOverworld(ChunkGenerator chunkGenerator) {
return new LevelStem(this.overworldDimensionType, chunkGenerator);
}
public LevelStem makeNoiseBasedOverworld(BiomeSource biomeSource, Holder<NoiseGeneratorSettings> holder) {
return this.makeOverworld(new NoiseBasedChunkGenerator(biomeSource, holder));
}
} }
} }

View file

@ -13,7 +13,6 @@ import java.util.Optional;
public class WorldPresetsClient { public class WorldPresetsClient {
public static void registerCustomizeUI(ResourceKey<WorldPreset> key, PresetEditor setupScreen) { public static void registerCustomizeUI(ResourceKey<WorldPreset> key, PresetEditor setupScreen) {
if (setupScreen != null) { if (setupScreen != null) {
//TODO: 1.19.3 this is called out of order
PresetEditor.EDITORS.put(Optional.of(key), setupScreen); PresetEditor.EDITORS.put(Optional.of(key), setupScreen);
} }
} }

View file

@ -30,14 +30,11 @@
"modmenu": [ "modmenu": [
"org.betterx.bclib.integration.modmenu.ModMenuEntryPoint" "org.betterx.bclib.integration.modmenu.ModMenuEntryPoint"
], ],
"worlds_together": [
"org.betterx.bclib.registry.PresetsRegistry"
],
"emi": [ "emi": [
"org.betterx.bclib.integration.emi.EMIPlugin" "org.betterx.bclib.integration.emi.EMIPlugin"
], ],
"fabric-datagen": [ "fabric-datagen": [
"org.betterx.bclib.datagen.BCLibDatagen" "org.betterx.datagen.bclib.BCLibDatagen"
] ]
}, },
"accessWidener": "bclib.accesswidener", "accessWidener": "bclib.accesswidener",

View file

@ -21,7 +21,6 @@
"WorldLoaderMixin", "WorldLoaderMixin",
"WorldPresetAccessor", "WorldPresetAccessor",
"WorldPresetMixin", "WorldPresetMixin",
"WorldPresetsBootstrapMixin",
"WorldStem_Mixin" "WorldStem_Mixin"
], ],
"injectors": { "injectors": {