SurfaceRule handling
This commit is contained in:
parent
7a891d71ee
commit
919e3c25c5
15 changed files with 147 additions and 96 deletions
|
@ -16,7 +16,7 @@ import org.betterx.bclib.api.datafixer.DataFixerAPI;
|
||||||
import org.betterx.bclib.api.datafixer.ForcedLevelPatch;
|
import org.betterx.bclib.api.datafixer.ForcedLevelPatch;
|
||||||
import org.betterx.bclib.api.datafixer.MigrationProfile;
|
import org.betterx.bclib.api.datafixer.MigrationProfile;
|
||||||
import org.betterx.bclib.config.Configs;
|
import org.betterx.bclib.config.Configs;
|
||||||
import org.betterx.bclib.presets.worldgen.WorldGenUtilities;
|
import org.betterx.bclib.api.worldgen.WorldGenUtil;
|
||||||
import org.betterx.bclib.util.MHelper;
|
import org.betterx.bclib.util.MHelper;
|
||||||
import org.betterx.bclib.world.generator.GeneratorOptions;
|
import org.betterx.bclib.world.generator.GeneratorOptions;
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ final class BiomeSourcePatch extends ForcedLevelPatch {
|
||||||
@Override
|
@Override
|
||||||
protected Boolean runLevelDatPatch(CompoundTag root, MigrationProfile profile) {
|
protected Boolean runLevelDatPatch(CompoundTag root, MigrationProfile profile) {
|
||||||
//make sure we have a working generators file before attempting to patch
|
//make sure we have a working generators file before attempting to patch
|
||||||
WorldGenUtilities.migrateGeneratorSettings();
|
WorldGenUtil.migrateGeneratorSettings();
|
||||||
|
|
||||||
final CompoundTag worldGenSettings = root.getCompound("Data").getCompound("WorldGenSettings");
|
final CompoundTag worldGenSettings = root.getCompound("Data").getCompound("WorldGenSettings");
|
||||||
final CompoundTag dimensions = worldGenSettings.getCompound("dimensions");
|
final CompoundTag dimensions = worldGenSettings.getCompound("dimensions");
|
||||||
|
@ -115,10 +115,10 @@ final class BiomeSourcePatch extends ForcedLevelPatch {
|
||||||
.resultOrPartial(BCLib.LOGGER::error);
|
.resultOrPartial(BCLib.LOGGER::error);
|
||||||
|
|
||||||
Optional<ChunkGenerator> netherGenerator = oLevelStem.map(l -> l.generator());
|
Optional<ChunkGenerator> netherGenerator = oLevelStem.map(l -> l.generator());
|
||||||
int biomeSourceVersion = WorldGenUtilities.getBiomeVersionForGenerator(netherGenerator.orElse(null));
|
int biomeSourceVersion = WorldGenUtil.getBiomeVersionForGenerator(netherGenerator.orElse(null));
|
||||||
int targetVersion = WorldGenUtilities.getBiomeVersionForCurrentWorld(dimensionKey);
|
int targetVersion = WorldGenUtil.getBiomeVersionForCurrentWorld(dimensionKey);
|
||||||
if (biomeSourceVersion != targetVersion) {
|
if (biomeSourceVersion != targetVersion) {
|
||||||
Optional<Holder<LevelStem>> refLevelStem = WorldGenUtilities.referenceStemForVersion(
|
Optional<Holder<LevelStem>> refLevelStem = WorldGenUtil.referenceStemForVersion(
|
||||||
dimensionKey,
|
dimensionKey,
|
||||||
targetVersion,
|
targetVersion,
|
||||||
registryAccess,
|
registryAccess,
|
||||||
|
|
|
@ -128,7 +128,6 @@ public class BiomeAPI {
|
||||||
|
|
||||||
private static final Map<ResourceKey, List<BiConsumer<ResourceLocation, Holder<Biome>>>> MODIFICATIONS = Maps.newHashMap();
|
private static final Map<ResourceKey, List<BiConsumer<ResourceLocation, Holder<Biome>>>> MODIFICATIONS = Maps.newHashMap();
|
||||||
private static final Map<ResourceKey, List<BiConsumer<ResourceLocation, Holder<Biome>>>> TAG_ADDERS = Maps.newHashMap();
|
private static final Map<ResourceKey, List<BiConsumer<ResourceLocation, Holder<Biome>>>> TAG_ADDERS = Maps.newHashMap();
|
||||||
private static final Map<ResourceLocation, SurfaceRules.RuleSource> SURFACE_RULES = Maps.newHashMap();
|
|
||||||
private static final Set<SurfaceRuleProvider> MODIFIED_SURFACE_PROVIDERS = new HashSet<>(8);
|
private static final Set<SurfaceRuleProvider> MODIFIED_SURFACE_PROVIDERS = new HashSet<>(8);
|
||||||
|
|
||||||
public static final BCLBiome NETHER_WASTES_BIOME = registerNetherBiome(getFromRegistry(Biomes.NETHER_WASTES).value());
|
public static final BCLBiome NETHER_WASTES_BIOME = registerNetherBiome(getFromRegistry(Biomes.NETHER_WASTES).value());
|
||||||
|
@ -728,45 +727,7 @@ public class BiomeAPI {
|
||||||
}
|
}
|
||||||
accessor.bclib_setFeatures(featureList);
|
accessor.bclib_setFeatures(featureList);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<SurfaceRules.RuleSource> getRuleSourcesForBiomes(Set<Holder<Biome>> biomes) {
|
|
||||||
Set<ResourceLocation> biomeIDs = biomes
|
|
||||||
.stream()
|
|
||||||
.map(biome -> getBiomeID(biome))
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
return getRuleSourcesFromIDs(biomeIDs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a list of SurfaceRules for all Biomes that are managed by the passed {@link BiomeSource}.
|
|
||||||
* If we have Surface rules for any of the Biomes from the given set of {@link BiomeSource}, they
|
|
||||||
* will be added to the result
|
|
||||||
* <p>
|
|
||||||
* Note: This Method is used in the {@link NoiseGeneratorSettingsMixin} which in turn
|
|
||||||
* is called from {@link #applyModifications(ServerLevel)}.
|
|
||||||
*
|
|
||||||
* @param sources The Set of {@link BiomeSource} we want to consider
|
|
||||||
* @return A list of {@link RuleSource}-Objects that are needed to create those Biomes
|
|
||||||
*/
|
|
||||||
public static List<SurfaceRules.RuleSource> getRuleSources(Set<BiomeSource> sources) {
|
|
||||||
final Set<Holder<Biome>> biomes = new HashSet<>();
|
|
||||||
for (BiomeSource s : sources) {
|
|
||||||
biomes.addAll(s.possibleBiomes());
|
|
||||||
}
|
|
||||||
|
|
||||||
return getRuleSourcesForBiomes(biomes);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<SurfaceRules.RuleSource> getRuleSourcesFromIDs(Set<ResourceLocation> biomeIDs) {
|
|
||||||
List<SurfaceRules.RuleSource> rules = Lists.newArrayList();
|
|
||||||
SURFACE_RULES.forEach((biomeID, rule) -> {
|
|
||||||
if (biomeIDs.contains(biomeID)) {
|
|
||||||
rules.add(rule);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return rules;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds new features to existing biome.
|
* Adds new features to existing biome.
|
||||||
*
|
*
|
||||||
|
@ -827,20 +788,8 @@ public class BiomeAPI {
|
||||||
accessor.bclib_setFeatureSet(featureSet);
|
accessor.bclib_setFeatureSet(featureSet);
|
||||||
accessor.bclib_setFlowerFeatures(flowerFeatures);
|
accessor.bclib_setFlowerFeatures(flowerFeatures);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds surface rule to specified biome.
|
|
||||||
*
|
|
||||||
* @param biomeID biome {@link ResourceLocation}.
|
|
||||||
* @param source {@link SurfaceRules.RuleSource}.
|
|
||||||
*/
|
|
||||||
public static void addSurfaceRule(ResourceLocation biomeID, SurfaceRules.RuleSource source) {
|
|
||||||
SURFACE_RULES.put(biomeID, source);
|
|
||||||
//NOISE_GENERATOR_SETTINGS.forEach(BiomeAPI::changeSurfaceRulesForGenerator);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds mob spawning to specified biome.
|
* Adds mob spawning to specified biome.
|
||||||
*
|
*
|
||||||
|
|
|
@ -24,7 +24,7 @@ import org.betterx.bclib.gui.screens.ConfirmFixScreen;
|
||||||
import org.betterx.bclib.gui.screens.LevelFixErrorScreen;
|
import org.betterx.bclib.gui.screens.LevelFixErrorScreen;
|
||||||
import org.betterx.bclib.gui.screens.LevelFixErrorScreen.Listener;
|
import org.betterx.bclib.gui.screens.LevelFixErrorScreen.Listener;
|
||||||
import org.betterx.bclib.gui.screens.ProgressScreen;
|
import org.betterx.bclib.gui.screens.ProgressScreen;
|
||||||
import org.betterx.bclib.presets.worldgen.WorldGenUtilities;
|
import org.betterx.bclib.api.worldgen.WorldGenUtil;
|
||||||
import org.betterx.bclib.util.Logger;
|
import org.betterx.bclib.util.Logger;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
@ -181,7 +181,7 @@ public class DataFixerAPI {
|
||||||
|
|
||||||
public static void createWorldData(LevelStorageAccess access, WorldGenSettings settings) {
|
public static void createWorldData(LevelStorageAccess access, WorldGenSettings settings) {
|
||||||
initializeWorldData(access, true);
|
initializeWorldData(access, true);
|
||||||
WorldGenUtilities.initializeWorldData(settings);
|
WorldGenUtil.initializeWorldData(settings);
|
||||||
WorldDataAPI.saveFile(BCLib.MOD_ID);
|
WorldDataAPI.saveFile(BCLib.MOD_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.betterx.bclib.presets.worldgen;
|
package org.betterx.bclib.api.worldgen;
|
||||||
|
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
|
@ -0,0 +1,77 @@
|
||||||
|
package org.betterx.bclib.api.worldgen;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
|
import net.minecraft.core.Holder;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.world.level.biome.Biome;
|
||||||
|
import net.minecraft.world.level.biome.BiomeSource;
|
||||||
|
import net.minecraft.world.level.levelgen.SurfaceRules;
|
||||||
|
import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource;
|
||||||
|
import org.betterx.bclib.api.biomes.BiomeAPI;
|
||||||
|
import org.betterx.bclib.mixin.common.NoiseGeneratorSettingsMixin;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class SurfaceRuleUtil {
|
||||||
|
private static final Map<ResourceLocation, RuleSource> SURFACE_RULES = Maps.newHashMap();
|
||||||
|
|
||||||
|
private static List<RuleSource> getRuleSourcesForBiomes(Set<Holder<Biome>> biomes) {
|
||||||
|
Set<ResourceLocation> biomeIDs = biomes
|
||||||
|
.stream()
|
||||||
|
.map(biome -> BiomeAPI.getBiomeID(biome))
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
return getRuleSourcesFromIDs(biomeIDs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a list of SurfaceRules for all Biomes that are managed by the passed {@link BiomeSource}.
|
||||||
|
* If we have Surface rules for any of the Biomes from the given set of {@link BiomeSource}, they
|
||||||
|
* will be added to the result
|
||||||
|
* <p>
|
||||||
|
* Note: This Method is used in the {@link NoiseGeneratorSettingsMixin} which in turn
|
||||||
|
* is called from {@link #applyModifications(ServerLevel)}.
|
||||||
|
*
|
||||||
|
* @param sources The Set of {@link BiomeSource} we want to consider
|
||||||
|
* @return A list of {@link RuleSource}-Objects that are needed to create those Biomes
|
||||||
|
*/
|
||||||
|
public static List<RuleSource> getRuleSources(Set<BiomeSource> sources) {
|
||||||
|
final Set<Holder<Biome>> biomes = new HashSet<>();
|
||||||
|
for (BiomeSource s : sources) {
|
||||||
|
biomes.addAll(s.possibleBiomes());
|
||||||
|
}
|
||||||
|
|
||||||
|
return getRuleSourcesForBiomes(biomes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<RuleSource> getRuleSources(BiomeSource biomeSource) {
|
||||||
|
return getRuleSourcesForBiomes(Sets.newHashSet(biomeSource.possibleBiomes()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<RuleSource> getRuleSourcesFromIDs(Set<ResourceLocation> biomeIDs) {
|
||||||
|
List<RuleSource> rules = Lists.newArrayList();
|
||||||
|
SURFACE_RULES.forEach((biomeID, rule) -> {
|
||||||
|
if (biomeIDs.contains(biomeID)) {
|
||||||
|
rules.add(rule);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return rules;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds surface rule to specified biome.
|
||||||
|
*
|
||||||
|
* @param biomeID biome {@link ResourceLocation}.
|
||||||
|
* @param source {@link RuleSource}.
|
||||||
|
*/
|
||||||
|
public static void addSurfaceRule(ResourceLocation biomeID, RuleSource source) {
|
||||||
|
SURFACE_RULES.put(biomeID, source);
|
||||||
|
//NOISE_GENERATOR_SETTINGS.forEach(BiomeAPI::changeSurfaceRulesForGenerator);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package org.betterx.bclib.presets.worldgen;
|
package org.betterx.bclib.api.worldgen;
|
||||||
|
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.MappedRegistry;
|
import net.minecraft.core.MappedRegistry;
|
||||||
|
@ -16,6 +16,8 @@ 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.dimension.LevelStem;
|
||||||
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
|
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
|
||||||
|
import net.minecraft.world.level.levelgen.SurfaceRules;
|
||||||
|
import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource;
|
||||||
import net.minecraft.world.level.levelgen.WorldGenSettings;
|
import net.minecraft.world.level.levelgen.WorldGenSettings;
|
||||||
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 net.minecraft.world.level.levelgen.structure.StructureSet;
|
||||||
|
@ -27,16 +29,22 @@ import com.mojang.serialization.Lifecycle;
|
||||||
import org.betterx.bclib.BCLib;
|
import org.betterx.bclib.BCLib;
|
||||||
import org.betterx.bclib.api.WorldDataAPI;
|
import org.betterx.bclib.api.WorldDataAPI;
|
||||||
import org.betterx.bclib.mixin.common.RegistryOpsAccessor;
|
import org.betterx.bclib.mixin.common.RegistryOpsAccessor;
|
||||||
|
import org.betterx.bclib.presets.worldgen.BCLWorldPresetSettings;
|
||||||
|
import org.betterx.bclib.presets.worldgen.BCLWorldPresets;
|
||||||
|
import org.betterx.bclib.presets.worldgen.WorldPresetSettings;
|
||||||
import org.betterx.bclib.util.ModUtil;
|
import org.betterx.bclib.util.ModUtil;
|
||||||
import org.betterx.bclib.world.generator.BCLBiomeSource;
|
import org.betterx.bclib.world.generator.BCLBiomeSource;
|
||||||
import org.betterx.bclib.world.generator.BCLibEndBiomeSource;
|
import org.betterx.bclib.world.generator.BCLibEndBiomeSource;
|
||||||
import org.betterx.bclib.world.generator.BCLibNetherBiomeSource;
|
import org.betterx.bclib.world.generator.BCLibNetherBiomeSource;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class WorldGenUtilities {
|
public class WorldGenUtil {
|
||||||
private static final String TAG_VERSION = "version";
|
private static final String TAG_VERSION = "version";
|
||||||
private static final String TAG_BN_GEN_VERSION = "generator_version";
|
private static final String TAG_BN_GEN_VERSION = "generator_version";
|
||||||
private static String TAG_GENERATOR = "generator";
|
private static String TAG_GENERATOR = "generator";
|
||||||
|
@ -379,4 +387,17 @@ public class WorldGenUtilities {
|
||||||
this.biomes = biomes;
|
this.biomes = biomes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static RuleSource addRulesForBiomeSource(RuleSource org, BiomeSource biomeSource) {
|
||||||
|
List<RuleSource> additionalRules = SurfaceRuleUtil.getRuleSources(biomeSource);
|
||||||
|
if (org instanceof SurfaceRules.SequenceRuleSource sequenceRule) {
|
||||||
|
List<RuleSource> existingSequence = sequenceRule.sequence();
|
||||||
|
additionalRules = additionalRules.stream().filter(r -> existingSequence.indexOf(r) < 0).collect(Collectors.toList());
|
||||||
|
additionalRules.addAll(sequenceRule.sequence());
|
||||||
|
} else {
|
||||||
|
additionalRules.add(org);
|
||||||
|
}
|
||||||
|
|
||||||
|
return SurfaceRules.sequence(additionalRules.toArray(new RuleSource[additionalRules.size()]));
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -15,7 +15,7 @@ import net.fabricmc.api.Environment;
|
||||||
import org.betterx.bclib.BCLib;
|
import org.betterx.bclib.BCLib;
|
||||||
import org.betterx.bclib.gui.gridlayout.GridCheckboxCell;
|
import org.betterx.bclib.gui.gridlayout.GridCheckboxCell;
|
||||||
import org.betterx.bclib.gui.gridlayout.GridLayout;
|
import org.betterx.bclib.gui.gridlayout.GridLayout;
|
||||||
import org.betterx.bclib.presets.worldgen.WorldGenUtilities;
|
import org.betterx.bclib.api.worldgen.WorldGenUtil;
|
||||||
import org.betterx.bclib.world.generator.BCLBiomeSource;
|
import org.betterx.bclib.world.generator.BCLBiomeSource;
|
||||||
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
@ -39,14 +39,14 @@ public class WorldSetupScreen extends BCLibScreen {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void initLayout() {
|
protected void initLayout() {
|
||||||
final int netherVersion = WorldGenUtilities.getBiomeVersionForGenerator(context
|
final int netherVersion = WorldGenUtil.getBiomeVersionForGenerator(context
|
||||||
.worldGenSettings()
|
.worldGenSettings()
|
||||||
.dimensions()
|
.dimensions()
|
||||||
.getOrCreateHolderOrThrow(
|
.getOrCreateHolderOrThrow(
|
||||||
LevelStem.NETHER)
|
LevelStem.NETHER)
|
||||||
.value()
|
.value()
|
||||||
.generator());
|
.generator());
|
||||||
final int endVersion = WorldGenUtilities.getBiomeVersionForGenerator(context
|
final int endVersion = WorldGenUtil.getBiomeVersionForGenerator(context
|
||||||
.worldGenSettings()
|
.worldGenSettings()
|
||||||
.dimensions()
|
.dimensions()
|
||||||
.getOrCreateHolderOrThrow(
|
.getOrCreateHolderOrThrow(
|
||||||
|
@ -149,7 +149,7 @@ public class WorldSetupScreen extends BCLibScreen {
|
||||||
int biomeSourceVersion
|
int biomeSourceVersion
|
||||||
) {
|
) {
|
||||||
createWorldScreen.worldGenSettingsComponent.updateSettings(
|
createWorldScreen.worldGenSettingsComponent.updateSettings(
|
||||||
(registryAccess, worldGenSettings) -> WorldGenUtilities.replaceGenerator(
|
(registryAccess, worldGenSettings) -> WorldGenUtil.replaceGenerator(
|
||||||
dimensionKey,
|
dimensionKey,
|
||||||
dimensionTypeKey,
|
dimensionTypeKey,
|
||||||
biomeSourceVersion,
|
biomeSourceVersion,
|
||||||
|
|
|
@ -14,7 +14,7 @@ import net.minecraft.world.level.levelgen.presets.WorldPreset;
|
||||||
import com.mojang.datafixers.util.Pair;
|
import com.mojang.datafixers.util.Pair;
|
||||||
import org.betterx.bclib.api.biomes.BiomeAPI;
|
import org.betterx.bclib.api.biomes.BiomeAPI;
|
||||||
import org.betterx.bclib.presets.worldgen.BCLWorldPresets;
|
import org.betterx.bclib.presets.worldgen.BCLWorldPresets;
|
||||||
import org.betterx.bclib.presets.worldgen.WorldGenUtilities;
|
import org.betterx.bclib.api.worldgen.WorldGenUtil;
|
||||||
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;
|
||||||
|
@ -44,7 +44,7 @@ public class CreateWorldScreenMixin {
|
||||||
private static WorldLoader.WorldDataSupplier<WorldGenSettings> bcl_NewDefaultSettings(WorldLoader.WorldDataSupplier<WorldGenSettings> worldDataSupplier) {
|
private static WorldLoader.WorldDataSupplier<WorldGenSettings> bcl_NewDefaultSettings(WorldLoader.WorldDataSupplier<WorldGenSettings> worldDataSupplier) {
|
||||||
return (resourceManager, dataPackConfig) -> {
|
return (resourceManager, dataPackConfig) -> {
|
||||||
Pair<WorldGenSettings, RegistryAccess.Frozen> res = worldDataSupplier.get(resourceManager, dataPackConfig);
|
Pair<WorldGenSettings, RegistryAccess.Frozen> res = worldDataSupplier.get(resourceManager, dataPackConfig);
|
||||||
return WorldGenUtilities.defaultWorldDataSupplier(res.getSecond());
|
return WorldGenUtil.defaultWorldDataSupplier(res.getSecond());
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ import net.minecraft.world.level.chunk.ChunkGenerators;
|
||||||
|
|
||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
import org.betterx.bclib.BCLib;
|
import org.betterx.bclib.BCLib;
|
||||||
import org.betterx.bclib.presets.worldgen.BCLChunkGenerator;
|
import org.betterx.bclib.api.worldgen.BCLChunkGenerator;
|
||||||
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;
|
||||||
|
|
|
@ -5,7 +5,7 @@ import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
|
||||||
import net.minecraft.world.level.levelgen.SurfaceRules;
|
import net.minecraft.world.level.levelgen.SurfaceRules;
|
||||||
import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource;
|
import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource;
|
||||||
|
|
||||||
import org.betterx.bclib.api.biomes.BiomeAPI;
|
import org.betterx.bclib.api.worldgen.SurfaceRuleUtil;
|
||||||
import org.betterx.bclib.interfaces.SurfaceRuleProvider;
|
import org.betterx.bclib.interfaces.SurfaceRuleProvider;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
@ -28,7 +28,7 @@ public class NoiseGeneratorSettingsMixin implements SurfaceRuleProvider {
|
||||||
private final Set<BiomeSource> bclib_biomeSources = new HashSet<>();
|
private final Set<BiomeSource> bclib_biomeSources = new HashSet<>();
|
||||||
|
|
||||||
private void bclib_updateCustomRules() {
|
private void bclib_updateCustomRules() {
|
||||||
bclib_setCustomRules(BiomeAPI.getRuleSources(bclib_biomeSources));
|
bclib_setCustomRules(SurfaceRuleUtil.getRuleSources(bclib_biomeSources));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -11,7 +11,7 @@ import net.minecraft.world.level.storage.PrimaryLevelData;
|
||||||
import com.mojang.datafixers.DataFixer;
|
import com.mojang.datafixers.DataFixer;
|
||||||
import com.mojang.serialization.Dynamic;
|
import com.mojang.serialization.Dynamic;
|
||||||
import com.mojang.serialization.Lifecycle;
|
import com.mojang.serialization.Lifecycle;
|
||||||
import org.betterx.bclib.presets.worldgen.WorldGenUtilities;
|
import org.betterx.bclib.api.worldgen.WorldGenUtil;
|
||||||
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;
|
||||||
|
@ -44,7 +44,7 @@ public class PrimaryLevelDataMixin {
|
||||||
@ModifyArg(method = "parse", 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"))
|
@ModifyArg(method = "parse", 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_fixSettings(WorldGenSettings settings) {
|
private static WorldGenSettings bcl_fixSettings(WorldGenSettings settings) {
|
||||||
Optional<RegistryOps<Tag>> registryOps = bcl_lastRegistryAccess.get();
|
Optional<RegistryOps<Tag>> registryOps = bcl_lastRegistryAccess.get();
|
||||||
settings = WorldGenUtilities.fixSettingsInCurrentWorld(registryOps, settings);
|
settings = WorldGenUtil.fixSettingsInCurrentWorld(registryOps, settings);
|
||||||
|
|
||||||
bcl_lastRegistryAccess.set(Optional.empty());
|
bcl_lastRegistryAccess.set(Optional.empty());
|
||||||
return settings;
|
return settings;
|
||||||
|
|
|
@ -12,7 +12,7 @@ import net.minecraft.world.level.levelgen.structure.StructureSet;
|
||||||
import net.minecraft.world.level.levelgen.synth.NormalNoise;
|
import net.minecraft.world.level.levelgen.synth.NormalNoise;
|
||||||
|
|
||||||
import org.betterx.bclib.presets.worldgen.BCLWorldPresets;
|
import org.betterx.bclib.presets.worldgen.BCLWorldPresets;
|
||||||
import org.betterx.bclib.presets.worldgen.WorldGenUtilities;
|
import org.betterx.bclib.api.worldgen.WorldGenUtil;
|
||||||
import org.betterx.bclib.presets.worldgen.WorldPresetSettings;
|
import org.betterx.bclib.presets.worldgen.WorldPresetSettings;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
@ -52,12 +52,12 @@ public abstract class WorldPresetsBootstrapMixin {
|
||||||
@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;)Lnet/minecraft/core/Holder;"))
|
@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;)Lnet/minecraft/core/Holder;"))
|
||||||
private LevelStem bcl_getOverworldStem(LevelStem overworldStem) {
|
private LevelStem bcl_getOverworldStem(LevelStem overworldStem) {
|
||||||
WorldPresetSettings.bootstrap();
|
WorldPresetSettings.bootstrap();
|
||||||
WorldGenUtilities.Context netherContext = new WorldGenUtilities.Context(this.biomes,
|
WorldGenUtil.Context netherContext = new WorldGenUtil.Context(this.biomes,
|
||||||
this.netherDimensionType,
|
this.netherDimensionType,
|
||||||
this.structureSets,
|
this.structureSets,
|
||||||
this.noises,
|
this.noises,
|
||||||
this.netherNoiseSettings);
|
this.netherNoiseSettings);
|
||||||
WorldGenUtilities.Context endContext = new WorldGenUtilities.Context(this.biomes,
|
WorldGenUtil.Context endContext = new WorldGenUtil.Context(this.biomes,
|
||||||
this.endDimensionType,
|
this.endDimensionType,
|
||||||
this.structureSets,
|
this.structureSets,
|
||||||
this.noises,
|
this.noises,
|
||||||
|
|
|
@ -15,6 +15,8 @@ import net.minecraft.world.level.levelgen.WorldGenSettings;
|
||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||||
import org.betterx.bclib.BCLib;
|
import org.betterx.bclib.BCLib;
|
||||||
|
import org.betterx.bclib.api.worldgen.BCLChunkGenerator;
|
||||||
|
import org.betterx.bclib.api.worldgen.WorldGenUtil;
|
||||||
import org.betterx.bclib.interfaces.ChunkGeneratorAccessor;
|
import org.betterx.bclib.interfaces.ChunkGeneratorAccessor;
|
||||||
import org.betterx.bclib.interfaces.NoiseGeneratorSettingsProvider;
|
import org.betterx.bclib.interfaces.NoiseGeneratorSettingsProvider;
|
||||||
import org.betterx.bclib.world.generator.BCLBiomeSource;
|
import org.betterx.bclib.world.generator.BCLBiomeSource;
|
||||||
|
@ -60,14 +62,14 @@ public class BCLWorldPresetSettings extends WorldPresetSettings {
|
||||||
}
|
}
|
||||||
|
|
||||||
public BCLWorldPreset buildPreset(LevelStem overworldStem,
|
public BCLWorldPreset buildPreset(LevelStem overworldStem,
|
||||||
WorldGenUtilities.Context netherContext,
|
WorldGenUtil.Context netherContext,
|
||||||
WorldGenUtilities.Context endContext) {
|
WorldGenUtil.Context endContext) {
|
||||||
return new BCLWorldPreset(buildDimensionMap(overworldStem, netherContext, endContext), 1000, this);
|
return new BCLWorldPreset(buildDimensionMap(overworldStem, netherContext, endContext), 1000, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<ResourceKey<LevelStem>, LevelStem> buildDimensionMap(LevelStem overworldStem,
|
public Map<ResourceKey<LevelStem>, LevelStem> buildDimensionMap(LevelStem overworldStem,
|
||||||
WorldGenUtilities.Context netherContext,
|
WorldGenUtil.Context netherContext,
|
||||||
WorldGenUtilities.Context endContext) {
|
WorldGenUtil.Context endContext) {
|
||||||
return Map.of(LevelStem.OVERWORLD,
|
return Map.of(LevelStem.OVERWORLD,
|
||||||
overworldStem,
|
overworldStem,
|
||||||
LevelStem.NETHER,
|
LevelStem.NETHER,
|
||||||
|
@ -84,18 +86,18 @@ public class BCLWorldPresetSettings extends WorldPresetSettings {
|
||||||
return BCLBiomeSource.BIOME_SOURCE_VERSION_VANILLA;
|
return BCLBiomeSource.BIOME_SOURCE_VERSION_VANILLA;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LevelStem createStem(WorldGenUtilities.Context ctx, ResourceKey<LevelStem> key) {
|
public LevelStem createStem(WorldGenUtil.Context ctx, ResourceKey<LevelStem> key) {
|
||||||
if (key == LevelStem.NETHER) return createNetherStem(ctx);
|
if (key == LevelStem.NETHER) return createNetherStem(ctx);
|
||||||
if (key == LevelStem.END) return createEndStem(ctx);
|
if (key == LevelStem.END) return createEndStem(ctx);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LevelStem createNetherStem(WorldGenUtilities.Context ctx) {
|
public LevelStem createNetherStem(WorldGenUtil.Context ctx) {
|
||||||
return WorldGenUtilities.getBCLNetherLevelStem(ctx, Optional.of(netherVersion));
|
return WorldGenUtil.getBCLNetherLevelStem(ctx, Optional.of(netherVersion));
|
||||||
}
|
}
|
||||||
|
|
||||||
public LevelStem createEndStem(WorldGenUtilities.Context ctx) {
|
public LevelStem createEndStem(WorldGenUtil.Context ctx) {
|
||||||
return WorldGenUtilities.getBCLEndLevelStem(ctx, Optional.of(endVersion));
|
return WorldGenUtil.getBCLEndLevelStem(ctx, Optional.of(endVersion));
|
||||||
}
|
}
|
||||||
|
|
||||||
public BiomeSource fixBiomeSource(BiomeSource biomeSource, Set<Holder<Biome>> datapackBiomes) {
|
public BiomeSource fixBiomeSource(BiomeSource biomeSource, Set<Holder<Biome>> datapackBiomes) {
|
||||||
|
@ -112,7 +114,7 @@ public class BCLWorldPresetSettings extends WorldPresetSettings {
|
||||||
old.defaultBlock(),
|
old.defaultBlock(),
|
||||||
old.defaultFluid(),
|
old.defaultFluid(),
|
||||||
old.noiseRouter(),
|
old.noiseRouter(),
|
||||||
old.surfaceRule(),
|
WorldGenUtil.addRulesForBiomeSource(old.surfaceRule(), biomeSource),
|
||||||
old.spawnTarget(),
|
old.spawnTarget(),
|
||||||
old.seaLevel(),
|
old.seaLevel(),
|
||||||
old.disableMobGeneration(),
|
old.disableMobGeneration(),
|
||||||
|
@ -138,7 +140,7 @@ public class BCLWorldPresetSettings extends WorldPresetSettings {
|
||||||
ResourceKey<DimensionType> dimensionTypeKey,
|
ResourceKey<DimensionType> dimensionTypeKey,
|
||||||
WorldGenSettings settings) {
|
WorldGenSettings settings) {
|
||||||
var oldNether = settings.dimensions().getHolder(dimensionKey);
|
var oldNether = settings.dimensions().getHolder(dimensionKey);
|
||||||
int loaderVersion = WorldGenUtilities.getBiomeVersionForGenerator(oldNether
|
int loaderVersion = WorldGenUtil.getBiomeVersionForGenerator(oldNether
|
||||||
.map(h -> h.value().generator())
|
.map(h -> h.value().generator())
|
||||||
.orElse(null));
|
.orElse(null));
|
||||||
|
|
||||||
|
@ -146,7 +148,7 @@ public class BCLWorldPresetSettings extends WorldPresetSettings {
|
||||||
if (loaderVersion != targetVersion) {
|
if (loaderVersion != targetVersion) {
|
||||||
BCLib.LOGGER.info("Enforcing Correct Generator for " + dimensionKey.location().toString() + ".");
|
BCLib.LOGGER.info("Enforcing Correct Generator for " + dimensionKey.location().toString() + ".");
|
||||||
var chunkGenerator = oldNether.map(h -> h.value().generator()).orElse(null);
|
var chunkGenerator = oldNether.map(h -> h.value().generator()).orElse(null);
|
||||||
Optional<Holder<LevelStem>> refLevelStem = WorldGenUtilities.referenceStemForVersion(
|
Optional<Holder<LevelStem>> refLevelStem = WorldGenUtil.referenceStemForVersion(
|
||||||
dimensionKey,
|
dimensionKey,
|
||||||
targetVersion,
|
targetVersion,
|
||||||
access,
|
access,
|
||||||
|
@ -173,7 +175,7 @@ public class BCLWorldPresetSettings extends WorldPresetSettings {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return WorldGenUtilities.replaceGenerator(dimensionKey,
|
return WorldGenUtil.replaceGenerator(dimensionKey,
|
||||||
dimensionTypeKey,
|
dimensionTypeKey,
|
||||||
access,
|
access,
|
||||||
settings,
|
settings,
|
||||||
|
|
|
@ -12,6 +12,7 @@ import com.google.common.collect.Maps;
|
||||||
import org.betterx.bclib.BCLib;
|
import org.betterx.bclib.BCLib;
|
||||||
import org.betterx.bclib.api.tag.TagAPI;
|
import org.betterx.bclib.api.tag.TagAPI;
|
||||||
import org.betterx.bclib.api.tag.TagType;
|
import org.betterx.bclib.api.tag.TagType;
|
||||||
|
import org.betterx.bclib.api.worldgen.WorldGenUtil;
|
||||||
import org.betterx.bclib.world.generator.BCLBiomeSource;
|
import org.betterx.bclib.world.generator.BCLBiomeSource;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -82,8 +83,8 @@ public class BCLWorldPresets {
|
||||||
|
|
||||||
public static void bootstrapPresets(Registry<WorldPreset> presets,
|
public static void bootstrapPresets(Registry<WorldPreset> presets,
|
||||||
LevelStem overworldStem,
|
LevelStem overworldStem,
|
||||||
WorldGenUtilities.Context netherContext,
|
WorldGenUtil.Context netherContext,
|
||||||
WorldGenUtilities.Context endContext) {
|
WorldGenUtil.Context endContext) {
|
||||||
|
|
||||||
for (Map.Entry<ResourceKey<WorldPreset>, PresetBuilder> e : BUILDERS.entrySet()) {
|
for (Map.Entry<ResourceKey<WorldPreset>, PresetBuilder> e : BUILDERS.entrySet()) {
|
||||||
BCLWorldPreset preset = e.getValue().create(overworldStem, netherContext, endContext);
|
BCLWorldPreset preset = e.getValue().create(overworldStem, netherContext, endContext);
|
||||||
|
@ -100,7 +101,7 @@ public class BCLWorldPresets {
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
public interface PresetBuilder {
|
public interface PresetBuilder {
|
||||||
BCLWorldPreset create(LevelStem overworldStem,
|
BCLWorldPreset create(LevelStem overworldStem,
|
||||||
WorldGenUtilities.Context netherContext,
|
WorldGenUtil.Context netherContext,
|
||||||
WorldGenUtilities.Context endContext);
|
WorldGenUtil.Context endContext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ import org.betterx.bclib.BCLib;
|
||||||
import org.betterx.bclib.api.biomes.BCLBiomeBuilder;
|
import org.betterx.bclib.api.biomes.BCLBiomeBuilder;
|
||||||
import org.betterx.bclib.api.biomes.BiomeAPI;
|
import org.betterx.bclib.api.biomes.BiomeAPI;
|
||||||
import org.betterx.bclib.api.tag.TagAPI;
|
import org.betterx.bclib.api.tag.TagAPI;
|
||||||
|
import org.betterx.bclib.api.worldgen.SurfaceRuleUtil;
|
||||||
import org.betterx.bclib.util.WeightedList;
|
import org.betterx.bclib.util.WeightedList;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -341,7 +342,7 @@ public class BCLBiome extends BCLBiomeSettings {
|
||||||
if (key == null) {
|
if (key == null) {
|
||||||
BCLib.LOGGER.warning("BCL Biome " + biomeID + " does not have registry key!");
|
BCLib.LOGGER.warning("BCL Biome " + biomeID + " does not have registry key!");
|
||||||
} else {
|
} else {
|
||||||
BiomeAPI.addSurfaceRule(biomeID, SurfaceRules.ifTrue(SurfaceRules.isBiome(key), surface));
|
SurfaceRuleUtil.addSurfaceRule(biomeID, SurfaceRules.ifTrue(SurfaceRules.isBiome(key), surface));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue