This commit is contained in:
Zoë Gidiere
2023-12-12 19:07:57 -07:00
parent e83b70b5ae
commit 4c71355535
45 changed files with 253 additions and 300 deletions
@@ -27,7 +27,8 @@ fun Project.configureDistribution() {
group = "terra" group = "terra"
doFirst { doFirst {
file("${buildDir}/resources/main/packs/").deleteRecursively() file("${buildDir}/resources/main/packs/").deleteRecursively()
val defaultPackUrl = URL("https://github.com/PolyhedralDev/TerraOverworldConfig/releases/download/" + Versions.Terra.overworldConfig + "/default.zip") val defaultPackUrl =
URL("https://github.com/PolyhedralDev/TerraOverworldConfig/releases/download/" + Versions.Terra.overworldConfig + "/default.zip")
downloadPack(defaultPackUrl, project) downloadPack(defaultPackUrl, project)
} }
} }
@@ -1,9 +1,9 @@
package com.dfsek.terra.addons.biome.pipeline.v2.api.biome; package com.dfsek.terra.addons.biome.pipeline.v2.api.biome;
import java.util.Set;
import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.Biome;
import java.util.Set;
public final class DelegatedPipelineBiome implements PipelineBiome { public final class DelegatedPipelineBiome implements PipelineBiome {
private final Biome biome; private final Biome biome;
@@ -7,17 +7,17 @@
package com.dfsek.terra.addons.biome.pipeline.v2.stage.mutators; package com.dfsek.terra.addons.biome.pipeline.v2.stage.mutators;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Stage; import com.dfsek.terra.addons.biome.pipeline.v2.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome; import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.v2.pipeline.BiomeChunkImpl; import com.dfsek.terra.addons.biome.pipeline.v2.pipeline.BiomeChunkImpl;
import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.collection.ProbabilityCollection; import com.dfsek.terra.api.util.collection.ProbabilityCollection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;
public class ReplaceListStage implements Stage { public class ReplaceListStage implements Stage {
private final Map<PipelineBiome, ProbabilityCollection<PipelineBiome>> replace; private final Map<PipelineBiome, ProbabilityCollection<PipelineBiome>> replace;
@@ -6,6 +6,8 @@ import cloud.commandframework.arguments.standard.EnumArgument;
import cloud.commandframework.arguments.standard.LongArgument; import cloud.commandframework.arguments.standard.LongArgument;
import cloud.commandframework.context.CommandContext; import cloud.commandframework.context.CommandContext;
import java.util.random.RandomGenerator;
import java.util.random.RandomGeneratorFactory;
import com.dfsek.terra.addons.manifest.api.AddonInitializer; import com.dfsek.terra.addons.manifest.api.AddonInitializer;
import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.Platform;
@@ -21,8 +23,6 @@ import com.dfsek.terra.api.structure.Structure;
import com.dfsek.terra.api.util.Rotation; import com.dfsek.terra.api.util.Rotation;
import com.dfsek.terra.api.util.reflection.TypeKey; import com.dfsek.terra.api.util.reflection.TypeKey;
import java.util.random.RandomGenerator;
import java.util.random.RandomGeneratorFactory;
public class StructureCommandAddon implements AddonInitializer { public class StructureCommandAddon implements AddonInitializer {
@Inject @Inject
@@ -26,8 +26,8 @@ public class PaddedGridDistributor implements Distributor {
int cellZ = Math.floorDiv(z, cellWidth); int cellZ = Math.floorDiv(z, cellWidth);
RandomGenerator random = RandomGeneratorFactory.<RandomGenerator.SplittableGenerator>of("Xoroshiro128PlusPlus").create( RandomGenerator random = RandomGeneratorFactory.<RandomGenerator.SplittableGenerator>of("Xoroshiro128PlusPlus").create(
(MathUtil.murmur64(MathUtil.squash(cellX, cellZ)) ^ seed) + salt); (MathUtil.murmur64(MathUtil.squash(cellX, cellZ)) ^ seed) + salt);
int pointX = random.nextInt(width) + cellX * cellWidth; int pointX = random.nextInt(width) + cellX * cellWidth;
int pointZ = random.nextInt(width) + cellZ * cellWidth; int pointZ = random.nextInt(width) + cellZ * cellWidth;
@@ -87,9 +87,9 @@ public class TerraFlora implements Structure {
location.getZ(), world.getSeed()); location.getZ(), world.getSeed());
if(doRotation) { if(doRotation) {
Direction oneFace = new ArrayList<>(faces).get( Direction oneFace = new ArrayList<>(faces).get(
RandomGeneratorFactory.<RandomGenerator.SplittableGenerator>of("Xoroshiro128PlusPlus") RandomGeneratorFactory.<RandomGenerator.SplittableGenerator>of("Xoroshiro128PlusPlus")
.create(location.getX() ^ location.getZ()) .create(location.getX() ^ location.getZ())
.nextInt(faces.size())); // Get RandomGenerator face. .nextInt(faces.size())); // Get RandomGenerator face.
} }
world.setBlockState(location.mutable().add(0, i + c, 0).immutable(), data, physics); world.setBlockState(location.mutable().add(0, i + c, 0).immutable(), data, physics);
} }
@@ -40,9 +40,9 @@ public class GaussianRandomLocator implements Locator {
seed = 31 * seed + column.getX(); seed = 31 * seed + column.getX();
seed = 31 * seed + column.getZ(); seed = 31 * seed + column.getZ();
seed += salt; seed += salt;
RandomGenerator r = RandomGeneratorFactory.<RandomGenerator.SplittableGenerator>of("Xoroshiro128PlusPlus").create(seed); RandomGenerator r = RandomGeneratorFactory.<RandomGenerator.SplittableGenerator>of("Xoroshiro128PlusPlus").create(seed);
int size = points.get(r); int size = points.get(r);
@@ -36,9 +36,9 @@ public class RandomLocator implements Locator {
seed = 31 * seed + column.getX(); seed = 31 * seed + column.getX();
seed = 31 * seed + column.getZ(); seed = 31 * seed + column.getZ();
seed += salt; seed += salt;
RandomGenerator r = RandomGeneratorFactory.<RandomGenerator.SplittableGenerator>of("Xoroshiro128PlusPlus").create(seed); RandomGenerator r = RandomGeneratorFactory.<RandomGenerator.SplittableGenerator>of("Xoroshiro128PlusPlus").create(seed);
int size = points.get(r); int size = points.get(r);
BinaryColumnBuilder results = column.newBinaryColumn(); BinaryColumnBuilder results = column.newBinaryColumn();
@@ -1,11 +1,11 @@
package com.dfsek.terra.addons.ore.utils; package com.dfsek.terra.addons.ore.utils;
import java.util.random.RandomGenerator;
import com.dfsek.terra.api.block.BlockType; import com.dfsek.terra.api.block.BlockType;
import com.dfsek.terra.api.util.collection.MaterialSet; import com.dfsek.terra.api.util.collection.MaterialSet;
import com.dfsek.terra.api.world.WritableWorld; import com.dfsek.terra.api.world.WritableWorld;
import java.util.random.RandomGenerator;
public class VanillaOreUtils { public class VanillaOreUtils {
private static boolean shouldExpose(RandomGenerator random, double exposedChance) { private static boolean shouldExpose(RandomGenerator random, double exposedChance) {
@@ -14,7 +14,8 @@ public class VanillaOreUtils {
return random.nextFloat() < exposedChance; return random.nextFloat() < exposedChance;
} }
public static boolean shouldPlace(MaterialSet replaceable, BlockType type, Double exposedChance, RandomGenerator random, WritableWorld world, public static boolean shouldPlace(MaterialSet replaceable, BlockType type, Double exposedChance, RandomGenerator random,
WritableWorld world,
int x, int x,
int y, int z) { int y, int z) {
if(!replaceable.contains(type)) return false; if(!replaceable.contains(type)) return false;
@@ -57,7 +57,7 @@ public class Pool {
* @return List&lt;ItemStack&gt; - The list of items fetched. * @return List&lt;ItemStack&gt; - The list of items fetched.
*/ */
public List<ItemStack> getItems(RandomGenerator r) { public List<ItemStack> getItems(RandomGenerator r) {
int rolls = r.nextInt(max - min + 1) + min; int rolls = r.nextInt(max - min + 1) + min;
List<ItemStack> items = new ArrayList<>(); List<ItemStack> items = new ArrayList<>();
for(int i = 0; i < rolls; i++) { for(int i = 0; i < rolls; i++) {
@@ -53,37 +53,37 @@ public class FeatureGenerationStage implements GenerationStage, StringIdentifiab
int tx = cx + chunkX; int tx = cx + chunkX;
int tz = cz + chunkZ; int tz = cz + chunkZ;
world.getBiomeProvider() world.getBiomeProvider()
.getColumn(tx, tz, world) .getColumn(tx, tz, world)
.forRanges(resolution, (min, max, biome) -> { .forRanges(resolution, (min, max, biome) -> {
for(int subChunkX = 0; subChunkX < resolution; subChunkX++) { for(int subChunkX = 0; subChunkX < resolution; subChunkX++) {
for(int subChunkZ = 0; subChunkZ < resolution; subChunkZ++) { for(int subChunkZ = 0; subChunkZ < resolution; subChunkZ++) {
int x = subChunkX + tx; int x = subChunkX + tx;
int z = subChunkZ + tz; int z = subChunkZ + tz;
long coordinateSeed = (seed * 31 + x) * 31 + z; long coordinateSeed = (seed * 31 + x) * 31 + z;
Column<WritableWorld> column = world.column(x, z); Column<WritableWorld> column = world.column(x, z);
biome.getContext() biome.getContext()
.get(biomeFeaturesKey) .get(biomeFeaturesKey)
.getFeatures() .getFeatures()
.getOrDefault(this, Collections.emptyList()) .getOrDefault(this, Collections.emptyList())
.forEach(feature -> { .forEach(feature -> {
platform.getProfiler().push(feature.getID()); platform.getProfiler().push(feature.getID());
if(feature.getDistributor().matches(x, z, seed)) { if(feature.getDistributor().matches(x, z, seed)) {
feature.getLocator() feature.getLocator()
.getSuitableCoordinates(column.clamp(min, max)) .getSuitableCoordinates(column.clamp(min, max))
.forEach(y -> feature.getStructure(world, x, y, z) .forEach(y -> feature.getStructure(world, x, y, z)
.generate(Vector3Int.of(x, y, z), .generate(Vector3Int.of(x, y, z),
world, world,
RandomGeneratorFactory.<RandomGenerator.SplittableGenerator>of( RandomGeneratorFactory.<RandomGenerator.SplittableGenerator>of(
"Xoroshiro128PlusPlus") "Xoroshiro128PlusPlus")
.create(coordinateSeed * 31 + y), .create(coordinateSeed * 31 + y),
Rotation.NONE) Rotation.NONE)
); );
} }
platform.getProfiler().pop(feature.getID()); platform.getProfiler().pop(feature.getID());
}); });
} }
} }
}); });
} }
} }
platform.getProfiler().pop(profile); platform.getProfiler().pop(profile);
@@ -1,7 +1,5 @@
package com.dfsek.terra.addons.structure.mutator; package com.dfsek.terra.addons.structure.mutator;
import java.util.random.RandomGenerator;
import com.dfsek.terra.api.registry.key.Keyed; import com.dfsek.terra.api.registry.key.Keyed;
import com.dfsek.terra.api.registry.key.RegistryKey; import com.dfsek.terra.api.registry.key.RegistryKey;
import com.dfsek.terra.api.structure.Structure; import com.dfsek.terra.api.structure.Structure;
@@ -11,6 +9,8 @@ import com.dfsek.terra.api.world.WritableWorld;
import com.dfsek.terra.api.world.util.ReadInterceptor; import com.dfsek.terra.api.world.util.ReadInterceptor;
import com.dfsek.terra.api.world.util.WriteInterceptor; import com.dfsek.terra.api.world.util.WriteInterceptor;
import java.util.random.RandomGenerator;
public class MutatedStructure implements Structure, Keyed<MutatedStructure> { public class MutatedStructure implements Structure, Keyed<MutatedStructure> {
private final RegistryKey key; private final RegistryKey key;
@@ -137,7 +137,7 @@ public class StructureScript implements Structure, Keyed<StructureScript> {
platform.getProfiler().pop(profile); platform.getProfiler().pop(profile);
return result; return result;
} }
public boolean generate(Vector3Int location, WritableWorld world, RandomGenerator random, Rotation rotation, int recursions) { public boolean generate(Vector3Int location, WritableWorld world, RandomGenerator random, Rotation rotation, int recursions) {
platform.getProfiler().push(profile); platform.getProfiler().push(profile);
boolean result = applyBlock(new TerraImplementationArguments(location, rotation, random, world, recursions)); boolean result = applyBlock(new TerraImplementationArguments(location, rotation, random, world, recursions));
@@ -26,7 +26,7 @@ public class TerraImplementationArguments implements ImplementationArguments {
private final int recursions; private final int recursions;
private final Vector3Int origin; private final Vector3Int origin;
private boolean waterlog = false; private boolean waterlog = false;
public TerraImplementationArguments(Vector3Int origin, Rotation rotation, RandomGenerator random, WritableWorld world, int recursions) { public TerraImplementationArguments(Vector3Int origin, Rotation rotation, RandomGenerator random, WritableWorld world, int recursions) {
this.rotation = rotation; this.rotation = rotation;
this.random = random; this.random = random;
@@ -38,7 +38,7 @@ public class TerraImplementationArguments implements ImplementationArguments {
public int getRecursions() { public int getRecursions() {
return recursions; return recursions;
} }
public RandomGenerator getRandom() { public RandomGenerator getRandom() {
return random; return random;
} }
@@ -10,6 +10,9 @@ package com.dfsek.terra.addons.terrascript.script.functions;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.random.RandomGenerator;
import java.util.random.RandomGeneratorFactory;
import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments;
import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable;
import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.Scope;
@@ -28,9 +31,6 @@ import com.dfsek.terra.api.util.RotationUtil;
import com.dfsek.terra.api.util.vector.Vector2; import com.dfsek.terra.api.util.vector.Vector2;
import com.dfsek.terra.api.util.vector.Vector3; import com.dfsek.terra.api.util.vector.Vector3;
import java.util.random.RandomGenerator;
import java.util.random.RandomGeneratorFactory;
public class LootFunction implements Function<Void> { public class LootFunction implements Function<Void> {
private static final Logger LOGGER = LoggerFactory.getLogger(LootFunction.class); private static final Logger LOGGER = LoggerFactory.getLogger(LootFunction.class);
@@ -65,35 +65,35 @@ public class LootFunction implements Function<Void> {
registry.get(RegistryKey.parse(id)) registry.get(RegistryKey.parse(id))
.ifPresentOrElse(table -> { .ifPresentOrElse(table -> {
Vector3 apply = Vector3.of((int) Math.round(xz.getX()), Vector3 apply = Vector3.of((int) Math.round(xz.getX()),
y.apply(implementationArguments, scope) y.apply(implementationArguments, scope)
.intValue(), .intValue(),
(int) Math.round(xz.getZ())).mutable().add(arguments.getOrigin()).immutable(); (int) Math.round(xz.getZ())).mutable().add(arguments.getOrigin()).immutable();
try { try {
BlockEntity data = arguments.getWorld().getBlockEntity(apply); BlockEntity data = arguments.getWorld().getBlockEntity(apply);
if(!(data instanceof Container container)) { if(!(data instanceof Container container)) {
LOGGER.error("Failed to place loot at {}; block {} is not a container", LOGGER.error("Failed to place loot at {}; block {} is not a container",
apply, data); apply, data);
return; return;
} }
LootPopulateEvent event = new LootPopulateEvent(container, table, LootPopulateEvent event = new LootPopulateEvent(container, table,
arguments.getWorld().getPack(), script); arguments.getWorld().getPack(), script);
platform.getEventManager().callEvent(event); platform.getEventManager().callEvent(event);
if(event.isCancelled()) return; if(event.isCancelled()) return;
event.getTable().fillInventory(container.getInventory(), event.getTable().fillInventory(container.getInventory(),
RandomGeneratorFactory.<RandomGenerator.SplittableGenerator>of( RandomGeneratorFactory.<RandomGenerator.SplittableGenerator>of(
"Xoroshiro128PlusPlus").create(apply.hashCode())); "Xoroshiro128PlusPlus").create(apply.hashCode()));
data.update(false); data.update(false);
} catch(Exception e) { } catch(Exception e) {
LOGGER.error("Could not apply loot at {}", apply, e); LOGGER.error("Could not apply loot at {}", apply, e);
e.printStackTrace(); e.printStackTrace();
} }
}, },
() -> LOGGER.error("No such loot table {}", id)); () -> LOGGER.error("No such loot table {}", id));
return null; return null;
} }
@@ -7,8 +7,6 @@
package com.dfsek.terra.api; package com.dfsek.terra.api;
import com.dfsek.terra.api.config.MetaPack;
import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -16,6 +14,7 @@ import java.io.File;
import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.config.MetaPack;
import com.dfsek.terra.api.config.PluginConfig; import com.dfsek.terra.api.config.PluginConfig;
import com.dfsek.terra.api.event.EventManager; import com.dfsek.terra.api.event.EventManager;
import com.dfsek.terra.api.handle.ItemHandle; import com.dfsek.terra.api.handle.ItemHandle;
@@ -2,6 +2,8 @@ package com.dfsek.terra.api.config;
import ca.solostudios.strata.version.Version; import ca.solostudios.strata.version.Version;
import java.util.Map;
import com.dfsek.terra.api.properties.PropertyHolder; import com.dfsek.terra.api.properties.PropertyHolder;
import com.dfsek.terra.api.registry.key.Keyed; import com.dfsek.terra.api.registry.key.Keyed;
import com.dfsek.terra.api.registry.meta.CheckedRegistryHolder; import com.dfsek.terra.api.registry.meta.CheckedRegistryHolder;
@@ -9,8 +11,6 @@ import com.dfsek.terra.api.registry.meta.RegistryProvider;
import com.dfsek.terra.api.tectonic.ConfigLoadingDelegate; import com.dfsek.terra.api.tectonic.ConfigLoadingDelegate;
import com.dfsek.terra.api.tectonic.LoaderRegistrar; import com.dfsek.terra.api.tectonic.LoaderRegistrar;
import java.util.Map;
public interface MetaPack extends LoaderRegistrar, public interface MetaPack extends LoaderRegistrar,
ConfigLoadingDelegate, ConfigLoadingDelegate,
@@ -25,7 +25,7 @@ public interface LootTable {
* @param r The The RandomGenerator instance to use. * @param r The The RandomGenerator instance to use.
*/ */
void fillInventory(Inventory i, RandomGenerator r); void fillInventory(Inventory i, RandomGenerator r);
/** /**
* Fetches a list of ItemStacks from the loot table using the given RandomGenerator instance. * Fetches a list of ItemStacks from the loot table using the given RandomGenerator instance.
* *
@@ -17,10 +17,10 @@ public final class PopulationUtil {
public static RandomGenerator getRandom(Chunk c) { public static RandomGenerator getRandom(Chunk c) {
return getRandom(c, 0); return getRandom(c, 0);
} }
public static RandomGenerator getRandom(Chunk c, long salt) { public static RandomGenerator getRandom(Chunk c, long salt) {
return RandomGeneratorFactory.<RandomGenerator.SplittableGenerator>of("Xoroshiro128PlusPlus").create( return RandomGeneratorFactory.<RandomGenerator.SplittableGenerator>of("Xoroshiro128PlusPlus").create(
getCarverChunkSeed(c.getX(), c.getZ(), c.getWorld().getSeed() + salt)); getCarverChunkSeed(c.getX(), c.getZ(), c.getWorld().getSeed() + salt));
} }
/** /**
@@ -18,9 +18,9 @@ public interface Range extends Iterable<Integer> {
Range multiply(int mult); Range multiply(int mult);
Range reflect(int pt); Range reflect(int pt);
int get(RandomGenerator r); int get(RandomGenerator r);
Range intersects(Range other); Range intersects(Range other);
Range add(int add); Range add(int add);
@@ -18,10 +18,6 @@
package com.dfsek.terra; package com.dfsek.terra;
import com.dfsek.tectonic.api.TypeRegistry; import com.dfsek.tectonic.api.TypeRegistry;
import com.dfsek.terra.api.config.MetaPack;
import com.dfsek.terra.registry.master.MetaConfigRegistry;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -55,6 +51,7 @@ import com.dfsek.terra.api.Platform;
import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.addon.bootstrap.BootstrapAddonClassLoader; import com.dfsek.terra.api.addon.bootstrap.BootstrapAddonClassLoader;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.config.MetaPack;
import com.dfsek.terra.api.config.PluginConfig; import com.dfsek.terra.api.config.PluginConfig;
import com.dfsek.terra.api.event.EventManager; import com.dfsek.terra.api.event.EventManager;
import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent;
@@ -77,6 +74,7 @@ import com.dfsek.terra.registry.LockedRegistryImpl;
import com.dfsek.terra.registry.OpenRegistryImpl; import com.dfsek.terra.registry.OpenRegistryImpl;
import com.dfsek.terra.registry.master.ConfigRegistry; import com.dfsek.terra.registry.master.ConfigRegistry;
import com.dfsek.terra.registry.master.ConfigRegistry.PackLoadFailuresException; import com.dfsek.terra.registry.master.ConfigRegistry.PackLoadFailuresException;
import com.dfsek.terra.registry.master.MetaConfigRegistry;
/** /**
@@ -168,7 +166,6 @@ public abstract class AbstractPlatform implements Platform {
.global(); .global();
logger.info("Terra addons successfully loaded."); logger.info("Terra addons successfully loaded.");
logger.info("Finished initialization."); logger.info("Finished initialization.");
} }
@@ -1,8 +1,16 @@
package com.dfsek.terra.config.pack; package com.dfsek.terra.config.pack;
import ca.solostudios.strata.version.Version; import ca.solostudios.strata.version.Version;
import com.dfsek.tectonic.api.TypeRegistry;
import com.dfsek.tectonic.api.config.Configuration;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.tectonic.api.loader.AbstractConfigLoader;
import com.dfsek.tectonic.api.loader.ConfigLoader;
import com.dfsek.tectonic.api.loader.type.TypeLoader;
import com.dfsek.tectonic.yaml.YamlConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.ParameterizedType; import java.lang.reflect.ParameterizedType;
@@ -18,58 +26,34 @@ import java.util.Map;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import com.dfsek.tectonic.api.TypeRegistry;
import com.dfsek.tectonic.api.config.Configuration;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.tectonic.api.loader.AbstractConfigLoader;
import com.dfsek.tectonic.api.loader.ConfigLoader;
import com.dfsek.tectonic.api.loader.type.TypeLoader;
import com.dfsek.tectonic.yaml.YamlConfiguration;
import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.Platform;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.config.ConfigType;
import com.dfsek.terra.api.config.MetaPack; import com.dfsek.terra.api.config.MetaPack;
import com.dfsek.terra.api.properties.Context; import com.dfsek.terra.api.properties.Context;
import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.registry.OpenRegistry; import com.dfsek.terra.api.registry.OpenRegistry;
import com.dfsek.terra.api.registry.Registry; import com.dfsek.terra.api.registry.Registry;
import com.dfsek.terra.api.registry.key.RegistryKey; import com.dfsek.terra.api.registry.key.RegistryKey;
import com.dfsek.terra.api.tectonic.ConfigLoadingDelegate;
import com.dfsek.terra.api.util.reflection.ReflectionUtil; import com.dfsek.terra.api.util.reflection.ReflectionUtil;
import com.dfsek.terra.api.util.reflection.TypeKey; import com.dfsek.terra.api.util.reflection.TypeKey;
import com.dfsek.terra.config.loaders.GenericTemplateSupplierLoader; import com.dfsek.terra.config.loaders.GenericTemplateSupplierLoader;
import com.dfsek.terra.config.loaders.config.BufferedImageLoader;
import com.dfsek.terra.registry.CheckedRegistryImpl; import com.dfsek.terra.registry.CheckedRegistryImpl;
import com.dfsek.terra.registry.OpenRegistryImpl; import com.dfsek.terra.registry.OpenRegistryImpl;
import com.dfsek.terra.registry.master.ConfigRegistry; import com.dfsek.terra.registry.master.ConfigRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MetaPackImpl implements MetaPack { public class MetaPackImpl implements MetaPack {
private static final Pattern PATTERN = Pattern.compile(", "); private static final Pattern PATTERN = Pattern.compile(", ");
private final MetaPackTemplate template = new MetaPackTemplate();
private final Platform platform;
private final Path rootPath;
private final Map<String, ConfigPack> packs = new HashMap<>();
private final ConfigLoader selfLoader = new ConfigLoader();
private final Context context = new Context();
private final RegistryKey key;
private final Map<Type, CheckedRegistryImpl<?>> registryMap = new HashMap<>();
private static final Logger logger = LoggerFactory.getLogger(MetaPackImpl.class); private static final Logger logger = LoggerFactory.getLogger(MetaPackImpl.class);
private final MetaPackTemplate template = new MetaPackTemplate();
private final Platform platform;
private final Path rootPath;
private final Map<String, ConfigPack> packs = new HashMap<>();
private final ConfigLoader selfLoader = new ConfigLoader();
private final Context context = new Context();
private final RegistryKey key;
private final Map<Type, CheckedRegistryImpl<?>> registryMap = new HashMap<>();
private final AbstractConfigLoader abstractConfigLoader = new AbstractConfigLoader(); private final AbstractConfigLoader abstractConfigLoader = new AbstractConfigLoader();
private final String author; private final String author;
@@ -121,7 +105,7 @@ public class MetaPackImpl implements MetaPack {
template.getPacks().forEach((k, v) -> { template.getPacks().forEach((k, v) -> {
RegistryKey registryKey = RegistryKey.parse(v); RegistryKey registryKey = RegistryKey.parse(v);
if (configRegistry.contains(registryKey)) { if(configRegistry.contains(registryKey)) {
packs.put(k, configRegistry.get(registryKey).get()); packs.put(k, configRegistry.get(registryKey).get());
logger.info("Linked config pack \"{}\" to metapack \"{}:{}\".", v, namespace, id); logger.info("Linked config pack \"{}\" to metapack \"{}:{}\".", v, namespace, id);
} else { } else {
@@ -18,7 +18,6 @@
package com.dfsek.terra.registry.master; package com.dfsek.terra.registry.master;
import java.io.IOException; import java.io.IOException;
import java.io.Serial;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
@@ -26,10 +25,8 @@ import java.util.List;
import java.util.stream.Stream; import java.util.stream.Stream;
import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.Platform;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.config.MetaPack; import com.dfsek.terra.api.config.MetaPack;
import com.dfsek.terra.api.util.reflection.TypeKey; import com.dfsek.terra.api.util.reflection.TypeKey;
import com.dfsek.terra.config.pack.ConfigPackImpl;
import com.dfsek.terra.config.pack.MetaPackImpl; import com.dfsek.terra.config.pack.MetaPackImpl;
import com.dfsek.terra.registry.OpenRegistryImpl; import com.dfsek.terra.registry.OpenRegistryImpl;
import com.dfsek.terra.registry.master.ConfigRegistry.PackLoadFailuresException; import com.dfsek.terra.registry.master.ConfigRegistry.PackLoadFailuresException;
@@ -5,12 +5,12 @@ import org.bukkit.generator.LimitedRegion;
import org.bukkit.generator.WorldInfo; import org.bukkit.generator.WorldInfo;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Random;
import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.bukkit.world.BukkitProtoWorld; import com.dfsek.terra.bukkit.world.BukkitProtoWorld;
import java.util.Random;
public class BukkitBlockPopulator extends BlockPopulator { public class BukkitBlockPopulator extends BlockPopulator {
private final BlockState air; private final BlockState air;
@@ -28,7 +28,6 @@ import org.slf4j.LoggerFactory;
import java.util.List; import java.util.List;
import java.util.random.RandomGenerator; import java.util.random.RandomGenerator;
import java.util.stream.Collectors;
import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
@@ -61,8 +61,8 @@ public class BukkitWorldHandle implements WorldHandle {
@Override @Override
public @NotNull EntityType getEntity(@NotNull String id) { public @NotNull EntityType getEntity(@NotNull String id) {
if (!id.contains(":")) { //TODO: remove in 7.0 if(!id.contains(":")) { //TODO: remove in 7.0
String newid = "minecraft:" + id.toLowerCase();; String newid = "minecraft:" + id.toLowerCase();
logger.warn( logger.warn(
"Translating " + id + " to " + newid + ". In 1.20.3 entity parsing was reworked" + "Translating " + id + " to " + newid + ". In 1.20.3 entity parsing was reworked" +
". You are advised to preform this rename in your config backs as this translation will be removed in the next major " + ". You are advised to preform this rename in your config backs as this translation will be removed in the next major " +
@@ -1,11 +1,11 @@
package com.dfsek.terra.cli.handle; package com.dfsek.terra.cli.handle;
import java.util.Set;
import com.dfsek.terra.api.handle.ItemHandle; import com.dfsek.terra.api.handle.ItemHandle;
import com.dfsek.terra.api.inventory.Item; import com.dfsek.terra.api.inventory.Item;
import com.dfsek.terra.api.inventory.item.Enchantment; import com.dfsek.terra.api.inventory.item.Enchantment;
import java.util.Set;
public class CLIItemHandle implements ItemHandle { public class CLIItemHandle implements ItemHandle {
@Override @Override
@@ -19,13 +19,6 @@ package com.dfsek.terra.mod;
import ca.solostudios.strata.Versions; import ca.solostudios.strata.Versions;
import ca.solostudios.strata.version.Version; import ca.solostudios.strata.version.Version;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.mod.config.VanillaWorldProperties;
import com.dfsek.terra.mod.util.MinecraftUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -38,6 +31,7 @@ import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.mod.config.PostLoadCompatibilityOptions; import com.dfsek.terra.mod.config.PostLoadCompatibilityOptions;
import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions; import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions;
import com.dfsek.terra.mod.config.VanillaBiomeProperties; import com.dfsek.terra.mod.config.VanillaBiomeProperties;
import com.dfsek.terra.mod.config.VanillaWorldProperties;
public abstract class MinecraftAddon implements BaseAddon { public abstract class MinecraftAddon implements BaseAddon {
@@ -52,17 +46,17 @@ public abstract class MinecraftAddon implements BaseAddon {
@Override @Override
public void initialize() { public void initialize() {
modPlatform.getEventManager() modPlatform.getEventManager()
.getHandler(FunctionalEventHandler.class) .getHandler(FunctionalEventHandler.class)
.register(this, ConfigPackPostLoadEvent.class) .register(this, ConfigPackPostLoadEvent.class)
.then(event -> event.getPack().getContext().put(event.loadTemplate(new VanillaWorldProperties()))) .then(event -> event.getPack().getContext().put(event.loadTemplate(new VanillaWorldProperties())))
.priority(100) .priority(100)
.global(); .global();
modPlatform.getEventManager() modPlatform.getEventManager()
.getHandler(FunctionalEventHandler.class) .getHandler(FunctionalEventHandler.class)
.register(this, ConfigPackPreLoadEvent.class) .register(this, ConfigPackPreLoadEvent.class)
.then(event -> event.getPack().getContext().put(event.loadTemplate(new PreLoadCompatibilityOptions()))) .then(event -> event.getPack().getContext().put(event.loadTemplate(new PreLoadCompatibilityOptions())))
.global(); .global();
modPlatform.getEventManager() modPlatform.getEventManager()
.getHandler(FunctionalEventHandler.class) .getHandler(FunctionalEventHandler.class)
.register(this, ConfigPackPostLoadEvent.class) .register(this, ConfigPackPostLoadEvent.class)
@@ -6,7 +6,6 @@ import com.dfsek.tectonic.api.exception.LoadException;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnGroup; import net.minecraft.entity.SpawnGroup;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.sound.BiomeAdditionsSound; import net.minecraft.sound.BiomeAdditionsSound;
import net.minecraft.sound.BiomeMoodSound; import net.minecraft.sound.BiomeMoodSound;
@@ -22,7 +21,6 @@ import net.minecraft.world.biome.BiomeParticleConfig;
import net.minecraft.world.biome.SpawnSettings; import net.minecraft.world.biome.SpawnSettings;
import net.minecraft.world.biome.SpawnSettings.SpawnEntry; import net.minecraft.world.biome.SpawnSettings.SpawnEntry;
import net.minecraft.world.biome.source.MultiNoiseBiomeSourceParameterList; import net.minecraft.world.biome.source.MultiNoiseBiomeSourceParameterList;
import net.minecraft.world.dimension.DimensionOptions;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.gen.WorldPreset; import net.minecraft.world.gen.WorldPreset;
import net.minecraft.world.gen.chunk.ChunkGeneratorSettings; import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
@@ -70,7 +68,7 @@ public abstract class ModPlatform extends AbstractPlatform {
}); });
getRawConfigRegistry() getRawConfigRegistry()
.forEach(pack -> { .forEach(pack -> {
if (!configPacksInMetaPack.contains(pack.getID())) { if(!configPacksInMetaPack.contains(pack.getID())) {
PresetUtil.createDefault(pack, this).apply(registerFunction); PresetUtil.createDefault(pack, this).apply(registerFunction);
} }
}); });
@@ -2,15 +2,10 @@ package com.dfsek.terra.mod.config;
import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.terra.api.util.Range; import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.mod.implmentation.TerraIntProvider;
import net.minecraft.world.dimension.DimensionType.MonsterSettings;
public class MonsterSettingsConfig implements ObjectTemplate<MonsterSettingsConfig> { public class MonsterSettingsConfig implements ObjectTemplate<MonsterSettingsConfig> {
@Value("piglin-safe") @Value("piglin-safe")
@@ -46,7 +41,6 @@ public class MonsterSettingsConfig implements ObjectTemplate<MonsterSettingsConf
} }
@Override @Override
public MonsterSettingsConfig get() { public MonsterSettingsConfig get() {
return this; return this;
@@ -3,15 +3,7 @@ package com.dfsek.terra.mod.config;
import com.dfsek.tectonic.api.config.template.ConfigTemplate; import com.dfsek.tectonic.api.config.template.ConfigTemplate;
import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.terra.mod.implmentation.TerraIntProvider;
import net.minecraft.client.gl.Uniform;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.intprovider.IntProvider;
import net.minecraft.util.math.intprovider.IntProviderType;
import net.minecraft.util.math.random.Random;
import net.minecraft.world.dimension.DimensionType.MonsterSettings;
import com.dfsek.terra.api.properties.Properties; import com.dfsek.terra.api.properties.Properties;
import com.dfsek.terra.api.util.ConstantRange; import com.dfsek.terra.api.util.ConstantRange;
@@ -134,7 +126,7 @@ public class VanillaWorldProperties implements ConfigTemplate, Properties {
public ConstantRange getHeight() { public ConstantRange getHeight() {
//TODO THIS IS BAD //TODO THIS IS BAD
if (height != null) { if(height != null) {
return new ConstantRange(height.getMin(), height.getMax()); return new ConstantRange(height.getMin(), height.getMax());
} else { } else {
return null; return null;
@@ -1,20 +1,16 @@
package com.dfsek.terra.mod.data; package com.dfsek.terra.mod.data;
import com.dfsek.terra.api.util.ConstantRange;
import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.mod.generation.GenerationSettings;
import com.dfsek.terra.mod.implmentation.TerraIntProvider;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.registry.key.RegistryKey; import com.dfsek.terra.api.registry.key.RegistryKey;
import com.dfsek.terra.api.util.ConstantRange;
import com.dfsek.terra.mod.CommonPlatform; import com.dfsek.terra.mod.CommonPlatform;
import com.dfsek.terra.mod.generation.GenerationSettings;
import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper; import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper;
import com.dfsek.terra.mod.generation.TerraBiomeSource; import com.dfsek.terra.mod.generation.TerraBiomeSource;
import com.dfsek.terra.mod.implmentation.TerraIntProvider;
public final class Codecs { public final class Codecs {
@@ -75,6 +71,7 @@ public final class Codecs {
public static final Codec<TerraIntProvider> TERRA_CONSTANT_RANGE_INT_PROVIDER_TYPE = RecordCodecBuilder.create(range -> range.group( public static final Codec<TerraIntProvider> TERRA_CONSTANT_RANGE_INT_PROVIDER_TYPE = RecordCodecBuilder.create(range -> range.group(
Codec.INT.fieldOf("min").stable().forGetter(TerraIntProvider::getMin), Codec.INT.fieldOf("min").stable().forGetter(TerraIntProvider::getMin),
Codec.INT.fieldOf("max").stable().forGetter(TerraIntProvider::getMax)).apply(range, range.stable((min, max) -> new TerraIntProvider(new ConstantRange( Codec.INT.fieldOf("max").stable().forGetter(TerraIntProvider::getMax))
.apply(range, range.stable((min, max) -> new TerraIntProvider(new ConstantRange(
min, max))))); min, max)))));
} }
@@ -1,7 +1,6 @@
package com.dfsek.terra.mod.generation; package com.dfsek.terra.mod.generation;
import com.dfsek.terra.api.util.ConstantRange; import com.dfsek.terra.api.util.ConstantRange;
import com.dfsek.terra.api.util.Range;
public record GenerationSettings(ConstantRange height, Integer sealevel, Boolean mobGeneration) { public record GenerationSettings(ConstantRange height, Integer sealevel, Boolean mobGeneration) {
@@ -17,11 +17,6 @@
package com.dfsek.terra.mod.generation; package com.dfsek.terra.mod.generation;
import com.dfsek.terra.api.util.ConstantRange;
import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.mod.config.VanillaBiomeProperties;
import com.dfsek.terra.mod.config.VanillaWorldProperties;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
@@ -44,7 +39,6 @@ import net.minecraft.world.gen.GenerationStep.Carver;
import net.minecraft.world.gen.StructureAccessor; import net.minecraft.world.gen.StructureAccessor;
import net.minecraft.world.gen.StructureWeightSampler; import net.minecraft.world.gen.StructureWeightSampler;
import net.minecraft.world.gen.chunk.Blender; import net.minecraft.world.gen.chunk.Blender;
import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
import net.minecraft.world.gen.chunk.VerticalBlockSample; import net.minecraft.world.gen.chunk.VerticalBlockSample;
import net.minecraft.world.gen.densityfunction.DensityFunction.UnblendedNoisePos; import net.minecraft.world.gen.densityfunction.DensityFunction.UnblendedNoisePos;
import net.minecraft.world.gen.noise.NoiseConfig; import net.minecraft.world.gen.noise.NoiseConfig;
@@ -64,8 +64,8 @@ public class MinecraftWorldHandle implements WorldHandle {
@Override @Override
public @NotNull EntityType getEntity(@NotNull String id) { public @NotNull EntityType getEntity(@NotNull String id) {
if (!id.contains(":")) { //TODO: remove in 7.0 if(!id.contains(":")) { //TODO: remove in 7.0
String newid = "minecraft:" + id.toLowerCase();; String newid = "minecraft:" + id.toLowerCase();
logger.warn( logger.warn(
"Translating " + id + " to " + newid + ". In 1.20.3 entity parsing was reworked" + "Translating " + id + " to " + newid + ". In 1.20.3 entity parsing was reworked" +
". You are advised to preform this rename in your config packs as this translation will be removed in the next major " + ". You are advised to preform this rename in your config packs as this translation will be removed in the next major " +
@@ -1,9 +1,5 @@
package com.dfsek.terra.mod.implmentation; package com.dfsek.terra.mod.implmentation;
import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.mod.util.MinecraftAdapter;
import net.minecraft.util.math.intprovider.IntProvider; import net.minecraft.util.math.intprovider.IntProvider;
import net.minecraft.util.math.intprovider.IntProviderType; import net.minecraft.util.math.intprovider.IntProviderType;
import net.minecraft.util.math.random.Random; import net.minecraft.util.math.random.Random;
@@ -11,31 +7,34 @@ import net.minecraft.util.math.random.Random;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.mod.util.MinecraftAdapter;
public class TerraIntProvider extends IntProvider { public class TerraIntProvider extends IntProvider {
public static final Map<Class, IntProviderType> TERRA_RANGE_TYPE_TO_INT_PROVIDER_TYPE = new HashMap<>(); public static final Map<Class, IntProviderType> TERRA_RANGE_TYPE_TO_INT_PROVIDER_TYPE = new HashMap<>();
public Range delegate; public Range delegate;
public TerraIntProvider(Range delegate) { public TerraIntProvider(Range delegate) {
this.delegate = delegate; this.delegate = delegate;
} }
@Override @Override
public int get(Random random) { public int get(Random random) {
return delegate.get(MinecraftAdapter.adapt(random)); return delegate.get(MinecraftAdapter.adapt(random));
} }
@Override @Override
public int getMin() { public int getMin() {
return delegate.getMin(); return delegate.getMin();
} }
@Override @Override
public int getMax() { public int getMax() {
return delegate.getMax(); return delegate.getMax();
} }
@Override @Override
public IntProviderType<?> getType() { public IntProviderType<?> getType() {
return TERRA_RANGE_TYPE_TO_INT_PROVIDER_TYPE.get(delegate.getClass()); return TERRA_RANGE_TYPE_TO_INT_PROVIDER_TYPE.get(delegate.getClass());
@@ -59,7 +59,7 @@ public abstract class MobSpawnerBlockEntityMixin extends BlockEntity {
public void terra$setSpawnedType(@NotNull EntityType creatureType) { public void terra$setSpawnedType(@NotNull EntityType creatureType) {
Random rand; Random rand;
if (hasWorld()) { if(hasWorld()) {
rand = world.getRandom(); rand = world.getRandom();
} else { } else {
rand = Random.create(); rand = Random.create();
@@ -3,8 +3,6 @@ package com.dfsek.terra.mod.mixin.lifecycle;
import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.registry.DynamicRegistryManager;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.RegistryKeys;
import com.dfsek.terra.mod.util.MinecraftUtil;
import net.minecraft.server.DataPackContents; import net.minecraft.server.DataPackContents;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@@ -1,34 +1,25 @@
package com.dfsek.terra.mod.util; package com.dfsek.terra.mod.util;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.mod.ModPlatform;
import com.dfsek.terra.mod.config.MonsterSettingsConfig;
import com.dfsek.terra.mod.config.VanillaBiomeProperties;
import com.dfsek.terra.mod.config.VanillaWorldProperties;
import com.dfsek.terra.mod.implmentation.TerraIntProvider;
import net.minecraft.registry.BuiltinRegistries;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.tag.TagKey; import net.minecraft.registry.tag.TagKey;
import net.minecraft.util.Identifier;
import net.minecraft.world.dimension.DimensionOptions;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.dimension.DimensionType.MonsterSettings; import net.minecraft.world.dimension.DimensionType.MonsterSettings;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.OptionalLong; import java.util.OptionalLong;
import com.dfsek.terra.mod.ModPlatform;
import com.dfsek.terra.mod.config.MonsterSettingsConfig;
import com.dfsek.terra.mod.config.VanillaWorldProperties;
import com.dfsek.terra.mod.implmentation.TerraIntProvider;
public class DimensionUtil { public class DimensionUtil {
public static DimensionType createDimension(VanillaWorldProperties vanillaWorldProperties, DimensionType defaultDimension, ModPlatform platform) { public static DimensionType createDimension(VanillaWorldProperties vanillaWorldProperties, DimensionType defaultDimension,
ModPlatform platform) {
MonsterSettingsConfig monsterSettingsConfig; MonsterSettingsConfig monsterSettingsConfig;
if (vanillaWorldProperties.getMonsterSettings() != null) { if(vanillaWorldProperties.getMonsterSettings() != null) {
monsterSettingsConfig = vanillaWorldProperties.getMonsterSettings(); monsterSettingsConfig = vanillaWorldProperties.getMonsterSettings();
} else { } else {
monsterSettingsConfig = new MonsterSettingsConfig(); monsterSettingsConfig = new MonsterSettingsConfig();
@@ -43,13 +34,21 @@ public class DimensionUtil {
vanillaWorldProperties.getHasCeiling() == null ? defaultDimension.hasCeiling() : vanillaWorldProperties.getHasCeiling(), vanillaWorldProperties.getHasCeiling() == null ? defaultDimension.hasCeiling() : vanillaWorldProperties.getHasCeiling(),
vanillaWorldProperties.getUltraWarm() == null ? defaultDimension.ultrawarm() : vanillaWorldProperties.getUltraWarm(), vanillaWorldProperties.getUltraWarm() == null ? defaultDimension.ultrawarm() : vanillaWorldProperties.getUltraWarm(),
vanillaWorldProperties.getNatural() == null ? defaultDimension.natural() : vanillaWorldProperties.getNatural(), vanillaWorldProperties.getNatural() == null ? defaultDimension.natural() : vanillaWorldProperties.getNatural(),
vanillaWorldProperties.getCoordinateScale() == null ? defaultDimension.coordinateScale() : vanillaWorldProperties.getCoordinateScale(), vanillaWorldProperties.getCoordinateScale() == null
? defaultDimension.coordinateScale()
: vanillaWorldProperties.getCoordinateScale(),
vanillaWorldProperties.getBedWorks() == null ? defaultDimension.bedWorks() : vanillaWorldProperties.getBedWorks(), vanillaWorldProperties.getBedWorks() == null ? defaultDimension.bedWorks() : vanillaWorldProperties.getBedWorks(),
vanillaWorldProperties.getRespawnAnchorWorks() == null ? defaultDimension.respawnAnchorWorks() : vanillaWorldProperties.getRespawnAnchorWorks(), vanillaWorldProperties.getRespawnAnchorWorks() == null
? defaultDimension.respawnAnchorWorks()
: vanillaWorldProperties.getRespawnAnchorWorks(),
vanillaWorldProperties.getHeight() == null ? defaultDimension.minY() : vanillaWorldProperties.getHeight().getMin(), vanillaWorldProperties.getHeight() == null ? defaultDimension.minY() : vanillaWorldProperties.getHeight().getMin(),
vanillaWorldProperties.getHeight() == null ? defaultDimension.height() : vanillaWorldProperties.getHeight().getRange(), vanillaWorldProperties.getHeight() == null ? defaultDimension.height() : vanillaWorldProperties.getHeight().getRange(),
vanillaWorldProperties.getLogicalHeight() == null ? defaultDimension.logicalHeight() : vanillaWorldProperties.getLogicalHeight(), vanillaWorldProperties.getLogicalHeight() == null
vanillaWorldProperties.getInfiniburn() == null ? defaultDimension.infiniburn() : TagKey.of(RegistryKeys.BLOCK, vanillaWorldProperties.getInfiniburn()), ? defaultDimension.logicalHeight()
: vanillaWorldProperties.getLogicalHeight(),
vanillaWorldProperties.getInfiniburn() == null
? defaultDimension.infiniburn()
: TagKey.of(RegistryKeys.BLOCK, vanillaWorldProperties.getInfiniburn()),
vanillaWorldProperties.getEffects() == null ? defaultDimension.effects() : vanillaWorldProperties.getEffects(), vanillaWorldProperties.getEffects() == null ? defaultDimension.effects() : vanillaWorldProperties.getEffects(),
vanillaWorldProperties.getAmbientLight() == null ? defaultDimension.ambientLight() : vanillaWorldProperties.getAmbientLight(), vanillaWorldProperties.getAmbientLight() == null ? defaultDimension.ambientLight() : vanillaWorldProperties.getAmbientLight(),
monsterSettings monsterSettings
@@ -66,7 +65,9 @@ public class DimensionUtil {
monsterSettingsConfig.getHasRaids() == null ? defaultMonsterSettings.hasRaids() : monsterSettingsConfig.getHasRaids(), monsterSettingsConfig.getHasRaids() == null ? defaultMonsterSettings.hasRaids() : monsterSettingsConfig.getHasRaids(),
monsterSettingsConfig.getMonsterSpawnLight() == null ? defaultMonsterSettings.monsterSpawnLightTest() : new TerraIntProvider( monsterSettingsConfig.getMonsterSpawnLight() == null ? defaultMonsterSettings.monsterSpawnLightTest() : new TerraIntProvider(
monsterSettingsConfig.getMonsterSpawnLight()), monsterSettingsConfig.getMonsterSpawnLight()),
monsterSettingsConfig.getMonsterSpawnBlockLightLimit() == null ? defaultMonsterSettings.monsterSpawnBlockLightLimit() : monsterSettingsConfig.getMonsterSpawnBlockLightLimit() monsterSettingsConfig.getMonsterSpawnBlockLightLimit() == null
? defaultMonsterSettings.monsterSpawnBlockLightLimit()
: monsterSettingsConfig.getMonsterSpawnBlockLightLimit()
); );
return monsterSettings; return monsterSettings;
} }
@@ -21,11 +21,11 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.random.Random; import net.minecraft.util.math.random.Random;
import net.minecraft.world.HeightLimitView; import net.minecraft.world.HeightLimitView;
import java.util.random.RandomGenerator;
import com.dfsek.terra.api.util.vector.Vector3; import com.dfsek.terra.api.util.vector.Vector3;
import com.dfsek.terra.api.world.info.WorldProperties; import com.dfsek.terra.api.world.info.WorldProperties;
import java.util.random.RandomGenerator;
public final class MinecraftAdapter { public final class MinecraftAdapter {
@@ -56,44 +56,44 @@ public final class MinecraftAdapter {
} }
}; };
} }
public static RandomGenerator adapt(Random random) { public static RandomGenerator adapt(Random random) {
return new RandomGenerator() { return new RandomGenerator() {
@Override @Override
public boolean nextBoolean() { public boolean nextBoolean() {
return random.nextBoolean(); return random.nextBoolean();
} }
@Override @Override
public float nextFloat() { public float nextFloat() {
return random.nextFloat(); return random.nextFloat();
} }
@Override @Override
public double nextDouble() { public double nextDouble() {
return random.nextDouble(); return random.nextDouble();
} }
@Override @Override
public int nextInt() { public int nextInt() {
return random.nextInt(); return random.nextInt();
} }
@Override @Override
public int nextInt(int bound) { public int nextInt(int bound) {
return random.nextInt(bound); return random.nextInt(bound);
} }
@Override @Override
public long nextLong() { public long nextLong() {
return random.nextLong(); return random.nextLong();
} }
@Override @Override
public double nextGaussian() { public double nextGaussian() {
return random.nextGaussian(); return random.nextGaussian();
} }
@Override @Override
public int nextInt(int origin, int bound) { public int nextInt(int origin, int bound) {
return random.nextBetween(origin, bound); return random.nextBetween(origin, bound);
@@ -1,10 +1,5 @@
package com.dfsek.terra.mod.util; package com.dfsek.terra.mod.util;
import com.dfsek.terra.api.util.ConstantRange;
import com.dfsek.terra.mod.data.Codecs;
import com.dfsek.terra.mod.implmentation.TerraIntProvider;
import net.minecraft.block.entity.LootableContainerBlockEntity; import net.minecraft.block.entity.LootableContainerBlockEntity;
import net.minecraft.block.entity.MobSpawnerBlockEntity; import net.minecraft.block.entity.MobSpawnerBlockEntity;
import net.minecraft.block.entity.SignBlockEntity; import net.minecraft.block.entity.SignBlockEntity;
@@ -15,14 +10,11 @@ import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.intprovider.IntProviderType; import net.minecraft.util.math.intprovider.IntProviderType;
import net.minecraft.world.WorldAccess; import net.minecraft.world.WorldAccess;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.Biome.Builder; import net.minecraft.world.biome.Biome.Builder;
import net.minecraft.world.biome.BiomeEffects; import net.minecraft.world.biome.BiomeEffects;
import net.minecraft.world.biome.GenerationSettings; import net.minecraft.world.biome.GenerationSettings;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.ConfiguredFeature;
@@ -41,7 +33,10 @@ import com.dfsek.terra.api.block.entity.Container;
import com.dfsek.terra.api.block.entity.MobSpawner; import com.dfsek.terra.api.block.entity.MobSpawner;
import com.dfsek.terra.api.block.entity.Sign; import com.dfsek.terra.api.block.entity.Sign;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.util.ConstantRange;
import com.dfsek.terra.mod.config.VanillaBiomeProperties; import com.dfsek.terra.mod.config.VanillaBiomeProperties;
import com.dfsek.terra.mod.data.Codecs;
import com.dfsek.terra.mod.implmentation.TerraIntProvider;
import com.dfsek.terra.mod.mixin.access.BiomeAccessor; import com.dfsek.terra.mod.mixin.access.BiomeAccessor;
import com.dfsek.terra.mod.mixin_ifaces.FloraFeatureHolder; import com.dfsek.terra.mod.mixin_ifaces.FloraFeatureHolder;
@@ -102,14 +97,14 @@ public final class MinecraftUtil {
return Map.copyOf(TERRA_BIOME_MAP); return Map.copyOf(TERRA_BIOME_MAP);
} }
public static void registerIntProviderTypes() { public static void registerIntProviderTypes() {
IntProviderType<TerraIntProvider> CONSTANT = IntProviderType.register("terra:constant_range", IntProviderType<TerraIntProvider> CONSTANT = IntProviderType.register("terra:constant_range",
Codecs.TERRA_CONSTANT_RANGE_INT_PROVIDER_TYPE); Codecs.TERRA_CONSTANT_RANGE_INT_PROVIDER_TYPE);
TerraIntProvider.TERRA_RANGE_TYPE_TO_INT_PROVIDER_TYPE.put(ConstantRange.class, CONSTANT); TerraIntProvider.TERRA_RANGE_TYPE_TO_INT_PROVIDER_TYPE.put(ConstantRange.class, CONSTANT);
} }
public static RegistryKey<Biome> registerBiomeKey(Identifier identifier) { public static RegistryKey<Biome> registerBiomeKey(Identifier identifier) {
return RegistryKey.of(RegistryKeys.BIOME, identifier); return RegistryKey.of(RegistryKeys.BIOME, identifier);
} }
@@ -1,22 +1,22 @@
package com.dfsek.terra.mod.util; package com.dfsek.terra.mod.util;
import com.dfsek.terra.api.util.ConstantRange;
import com.dfsek.terra.mod.config.VanillaWorldProperties;
import com.dfsek.terra.mod.generation.GenerationSettings;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.source.MultiNoiseBiomeSource;
import net.minecraft.world.biome.source.MultiNoiseBiomeSourceParameterList;
import net.minecraft.world.biome.source.MultiNoiseBiomeSourceParameterLists;
import net.minecraft.world.biome.source.TheEndBiomeSource;
import net.minecraft.world.dimension.DimensionOptions; import net.minecraft.world.dimension.DimensionOptions;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.dimension.DimensionTypes; import net.minecraft.world.dimension.DimensionTypes;
import net.minecraft.world.gen.WorldPreset; import net.minecraft.world.gen.WorldPreset;
import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.chunk.ChunkGenerator;
import net.minecraft.world.gen.chunk.ChunkGeneratorSettings; import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
import net.minecraft.world.gen.chunk.NoiseChunkGenerator;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -27,17 +27,14 @@ import java.util.Locale;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.config.MetaPack; import com.dfsek.terra.api.config.MetaPack;
import com.dfsek.terra.api.util.ConstantRange;
import com.dfsek.terra.api.util.generic.pair.Pair; import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.mod.ModPlatform; import com.dfsek.terra.mod.ModPlatform;
import com.dfsek.terra.mod.config.VanillaWorldProperties;
import com.dfsek.terra.mod.generation.GenerationSettings;
import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper; import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper;
import com.dfsek.terra.mod.generation.TerraBiomeSource; import com.dfsek.terra.mod.generation.TerraBiomeSource;
import net.minecraft.world.biome.source.MultiNoiseBiomeSource;
import net.minecraft.world.biome.source.MultiNoiseBiomeSourceParameterList;
import net.minecraft.world.biome.source.MultiNoiseBiomeSourceParameterLists;
import net.minecraft.world.biome.source.TheEndBiomeSource;
import net.minecraft.world.gen.chunk.NoiseChunkGenerator;
public class PresetUtil { public class PresetUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(PresetUtil.class); private static final Logger LOGGER = LoggerFactory.getLogger(PresetUtil.class);
@@ -59,7 +56,8 @@ public class PresetUtil {
insertCustom(platform, "minecraft:overworld", pack, dimensionTypeRegistry, chunkGeneratorSettingsRegistry, dimensionMap); insertCustom(platform, "minecraft:overworld", pack, dimensionTypeRegistry, chunkGeneratorSettingsRegistry, dimensionMap);
insertDefaults(dimensionTypeRegistry, chunkGeneratorSettingsRegistry, multiNoiseBiomeSourceParameterLists, platform.biomeRegistry(), dimensionMap); insertDefaults(dimensionTypeRegistry, chunkGeneratorSettingsRegistry, multiNoiseBiomeSourceParameterLists, platform.biomeRegistry(),
dimensionMap);
WorldPreset preset = new WorldPreset(dimensionMap); WorldPreset preset = new WorldPreset(dimensionMap);
LOGGER.info("Created world type \"{}\"", generatorID); LOGGER.info("Created world type \"{}\"", generatorID);
@@ -72,8 +70,9 @@ public class PresetUtil {
Registry<MultiNoiseBiomeSourceParameterList> multiNoiseBiomeSourceParameterLists = Registry<MultiNoiseBiomeSourceParameterList> multiNoiseBiomeSourceParameterLists =
platform.multiNoiseBiomeSourceParameterListRegistry(); platform.multiNoiseBiomeSourceParameterListRegistry();
Identifier generatorID = Identifier.of("terra", metaPack.getID().toLowerCase(Locale.ROOT) + "/" + metaPack.getNamespace().toLowerCase( Identifier generatorID = Identifier.of("terra",
Locale.ROOT)); metaPack.getID().toLowerCase(Locale.ROOT) + "/" + metaPack.getNamespace().toLowerCase(
Locale.ROOT));
PRESETS.add(generatorID); PRESETS.add(generatorID);
@@ -83,7 +82,8 @@ public class PresetUtil {
insertCustom(platform, key, pack, dimensionTypeRegistry, chunkGeneratorSettingsRegistry, dimensionMap); insertCustom(platform, key, pack, dimensionTypeRegistry, chunkGeneratorSettingsRegistry, dimensionMap);
}); });
insertDefaults(dimensionTypeRegistry, chunkGeneratorSettingsRegistry, multiNoiseBiomeSourceParameterLists, platform.biomeRegistry(), dimensionMap); insertDefaults(dimensionTypeRegistry, chunkGeneratorSettingsRegistry, multiNoiseBiomeSourceParameterLists, platform.biomeRegistry(),
dimensionMap);
WorldPreset preset = new WorldPreset(dimensionMap); WorldPreset preset = new WorldPreset(dimensionMap);
LOGGER.info("Created world type \"{}\"", generatorID); LOGGER.info("Created world type \"{}\"", generatorID);
@@ -97,7 +97,7 @@ public class PresetUtil {
VanillaWorldProperties vanillaWorldProperties; VanillaWorldProperties vanillaWorldProperties;
if (pack.getContext().has(VanillaWorldProperties.class)) { if(pack.getContext().has(VanillaWorldProperties.class)) {
vanillaWorldProperties = pack.getContext().get(VanillaWorldProperties.class); vanillaWorldProperties = pack.getContext().get(VanillaWorldProperties.class);
} else { } else {
vanillaWorldProperties = new VanillaWorldProperties(); vanillaWorldProperties = new VanillaWorldProperties();
@@ -108,8 +108,9 @@ public class PresetUtil {
assert defaultDimension != null; assert defaultDimension != null;
DimensionType dimensionType = DimensionUtil.createDimension(vanillaWorldProperties, defaultDimension, platform); DimensionType dimensionType = DimensionUtil.createDimension(vanillaWorldProperties, defaultDimension, platform);
RegistryKey<DimensionType> dimensionTypeRegistryKey = MinecraftUtil.registerDimensionTypeKey(new Identifier("terra", pack.getID().toLowerCase( RegistryKey<DimensionType> dimensionTypeRegistryKey = MinecraftUtil.registerDimensionTypeKey(
Locale.ROOT))); new Identifier("terra", pack.getID().toLowerCase(
Locale.ROOT)));
Registry.registerReference(dimensionTypeRegistry, dimensionTypeRegistryKey, dimensionType); Registry.registerReference(dimensionTypeRegistry, dimensionTypeRegistryKey, dimensionType);
@@ -117,12 +118,19 @@ public class PresetUtil {
TerraBiomeSource biomeSource = new TerraBiomeSource(pack); TerraBiomeSource biomeSource = new TerraBiomeSource(pack);
RegistryEntry<ChunkGeneratorSettings> defaultGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(chunkGeneratorSettingsRegistry.get(new Identifier(vanillaWorldProperties.getVanillaGeneration()))); RegistryEntry<ChunkGeneratorSettings> defaultGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(
chunkGeneratorSettingsRegistry.get(new Identifier(vanillaWorldProperties.getVanillaGeneration())));
GenerationSettings generatorSettings = new GenerationSettings( GenerationSettings generatorSettings = new GenerationSettings(
vanillaWorldProperties.getHeight() == null ? new ConstantRange(defaultGeneratorSettings.value().generationShapeConfig().minimumY(), defaultGeneratorSettings.value().generationShapeConfig().height()) : vanillaWorldProperties.getHeight(), vanillaWorldProperties.getHeight() == null ? new ConstantRange(
vanillaWorldProperties.getSealevel() == null ? defaultGeneratorSettings.value().seaLevel() : vanillaWorldProperties.getSealevel(), defaultGeneratorSettings.value().generationShapeConfig().minimumY(),
vanillaWorldProperties.getMobGeneration() == null ? !defaultGeneratorSettings.value().mobGenerationDisabled() : vanillaWorldProperties.getMobGeneration()); defaultGeneratorSettings.value().generationShapeConfig().height()) : vanillaWorldProperties.getHeight(),
vanillaWorldProperties.getSealevel() == null
? defaultGeneratorSettings.value().seaLevel()
: vanillaWorldProperties.getSealevel(),
vanillaWorldProperties.getMobGeneration() == null
? !defaultGeneratorSettings.value().mobGenerationDisabled()
: vanillaWorldProperties.getMobGeneration());
ChunkGenerator generator = new MinecraftChunkGeneratorWrapper(biomeSource, pack, generatorSettings); ChunkGenerator generator = new MinecraftChunkGeneratorWrapper(biomeSource, pack, generatorSettings);
@@ -131,41 +139,52 @@ public class PresetUtil {
dimensionMap.put(dimensionOptionsRegistryKey, dimensionOptions); dimensionMap.put(dimensionOptionsRegistryKey, dimensionOptions);
} }
private static void insertDefaults(Registry<DimensionType> dimensionTypeRegistry, Registry<ChunkGeneratorSettings> chunkGeneratorSettingsRegistry, Registry<MultiNoiseBiomeSourceParameterList> multiNoiseBiomeSourceParameterLists, Registry<Biome> biomeRegistry, HashMap<RegistryKey<DimensionOptions>, DimensionOptions> map) { private static void insertDefaults(Registry<DimensionType> dimensionTypeRegistry,
if (!map.containsKey(DimensionOptions.OVERWORLD)) { Registry<ChunkGeneratorSettings> chunkGeneratorSettingsRegistry,
Registry<MultiNoiseBiomeSourceParameterList> multiNoiseBiomeSourceParameterLists,
Registry<Biome> biomeRegistry, HashMap<RegistryKey<DimensionOptions>, DimensionOptions> map) {
if(!map.containsKey(DimensionOptions.OVERWORLD)) {
RegistryEntry<DimensionType> overworldDimensionType = dimensionTypeRegistry.getEntry(DimensionTypes.OVERWORLD).orElseThrow(); RegistryEntry<DimensionType> overworldDimensionType = dimensionTypeRegistry.getEntry(DimensionTypes.OVERWORLD).orElseThrow();
RegistryEntry.Reference<MultiNoiseBiomeSourceParameterList> overworldChunkBiomeReference = multiNoiseBiomeSourceParameterLists.getEntry( RegistryEntry.Reference<MultiNoiseBiomeSourceParameterList> overworldChunkBiomeReference =
MultiNoiseBiomeSourceParameterLists.OVERWORLD).orElseThrow(); multiNoiseBiomeSourceParameterLists.getEntry(
MultiNoiseBiomeSourceParameterLists.OVERWORLD).orElseThrow();
RegistryEntry<ChunkGeneratorSettings> overworldChunkGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(ChunkGeneratorSettings.OVERWORLD) RegistryEntry<ChunkGeneratorSettings> overworldChunkGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(
ChunkGeneratorSettings.OVERWORLD)
.orElseThrow(); .orElseThrow();
DimensionOptions overworldDimensionOptions = new DimensionOptions(overworldDimensionType, (new NoiseChunkGenerator(MultiNoiseBiomeSource.create(overworldChunkBiomeReference), overworldChunkGeneratorSettings))); DimensionOptions overworldDimensionOptions = new DimensionOptions(overworldDimensionType,
(new NoiseChunkGenerator(MultiNoiseBiomeSource.create(overworldChunkBiomeReference), overworldChunkGeneratorSettings)));
map.put(DimensionOptions.OVERWORLD, overworldDimensionOptions); map.put(DimensionOptions.OVERWORLD, overworldDimensionOptions);
} }
if (!map.containsKey(DimensionOptions.NETHER)) { if(!map.containsKey(DimensionOptions.NETHER)) {
RegistryEntry<DimensionType> netherDimensionType = dimensionTypeRegistry.getEntry(DimensionTypes.THE_NETHER).orElseThrow(); RegistryEntry<DimensionType> netherDimensionType = dimensionTypeRegistry.getEntry(DimensionTypes.THE_NETHER).orElseThrow();
RegistryEntry.Reference<MultiNoiseBiomeSourceParameterList> netherChunkBiomeReference = multiNoiseBiomeSourceParameterLists.getEntry( RegistryEntry.Reference<MultiNoiseBiomeSourceParameterList> netherChunkBiomeReference =
MultiNoiseBiomeSourceParameterLists.NETHER).orElseThrow(); multiNoiseBiomeSourceParameterLists.getEntry(
MultiNoiseBiomeSourceParameterLists.NETHER).orElseThrow();
RegistryEntry<ChunkGeneratorSettings> netherChunkGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(ChunkGeneratorSettings.NETHER) RegistryEntry<ChunkGeneratorSettings> netherChunkGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(
ChunkGeneratorSettings.NETHER)
.orElseThrow(); .orElseThrow();
DimensionOptions overworldDimensionOptions = new DimensionOptions(netherDimensionType, (new NoiseChunkGenerator(MultiNoiseBiomeSource.create(netherChunkBiomeReference), netherChunkGeneratorSettings))); DimensionOptions overworldDimensionOptions = new DimensionOptions(netherDimensionType,
(new NoiseChunkGenerator(MultiNoiseBiomeSource.create(netherChunkBiomeReference), netherChunkGeneratorSettings)));
map.put(DimensionOptions.NETHER, overworldDimensionOptions); map.put(DimensionOptions.NETHER, overworldDimensionOptions);
} }
if (!map.containsKey(DimensionOptions.END)) { if(!map.containsKey(DimensionOptions.END)) {
RegistryEntry<DimensionType> endDimensionType = dimensionTypeRegistry.getEntry(DimensionTypes.THE_END).orElseThrow(); RegistryEntry<DimensionType> endDimensionType = dimensionTypeRegistry.getEntry(DimensionTypes.THE_END).orElseThrow();
RegistryEntry<ChunkGeneratorSettings> endChunkGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(ChunkGeneratorSettings.END) RegistryEntry<ChunkGeneratorSettings> endChunkGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(
ChunkGeneratorSettings.END)
.orElseThrow(); .orElseThrow();
DimensionOptions overworldDimensionOptions = new DimensionOptions(endDimensionType, (new NoiseChunkGenerator(TheEndBiomeSource.createVanilla(biomeRegistry.getReadOnlyWrapper()), endChunkGeneratorSettings))); DimensionOptions overworldDimensionOptions = new DimensionOptions(endDimensionType,
(new NoiseChunkGenerator(TheEndBiomeSource.createVanilla(biomeRegistry.getReadOnlyWrapper()), endChunkGeneratorSettings)));
map.put(DimensionOptions.END, overworldDimensionOptions); map.put(DimensionOptions.END, overworldDimensionOptions);
} }
} }
@@ -5,14 +5,11 @@ import ca.solostudios.strata.parser.tokenizer.ParseException;
import ca.solostudios.strata.version.Version; import ca.solostudios.strata.version.Version;
import net.minecraft.MinecraftVersion; import net.minecraft.MinecraftVersion;
import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.registry.DynamicRegistryManager;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.RegistryKeys;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.source.MultiNoiseBiomeSourceParameterList; import net.minecraft.world.biome.source.MultiNoiseBiomeSourceParameterList;
import net.minecraft.world.dimension.DimensionOptions;
import net.minecraft.world.dimension.DimensionOptionsRegistryHolder;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.gen.chunk.ChunkGeneratorSettings; import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -7,7 +7,6 @@ import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.RegistryLoader; import net.minecraft.registry.RegistryLoader;
import net.minecraft.world.biome.source.MultiNoiseBiomeSourceParameterList; import net.minecraft.world.biome.source.MultiNoiseBiomeSourceParameterList;
import net.minecraft.world.dimension.DimensionOptions;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.gen.WorldPreset; import net.minecraft.world.gen.WorldPreset;
import net.minecraft.world.gen.chunk.ChunkGeneratorSettings; import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
@@ -2,11 +2,10 @@ package com.dfsek.terra.lifecycle.util;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import com.dfsek.terra.mod.util.MinecraftUtil;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import com.dfsek.terra.mod.data.Codecs; import com.dfsek.terra.mod.data.Codecs;
import com.dfsek.terra.mod.util.MinecraftUtil;
public final class RegistryUtil { public final class RegistryUtil {