This commit is contained in:
Zoe Gidiere
2024-09-24 10:06:57 -06:00
parent a95a1284a4
commit 581651e83b
50 changed files with 179 additions and 188 deletions
@@ -1,9 +1,9 @@
package com.dfsek.terra.addons.biome.extrusion.api; package com.dfsek.terra.addons.biome.extrusion.api;
import com.dfsek.terra.api.world.biome.Biome;
import java.util.Collection; import java.util.Collection;
import com.dfsek.terra.api.world.biome.Biome;
public interface Extrusion { public interface Extrusion {
Biome extrude(Biome original, int x, int y, int z, long seed); Biome extrude(Biome original, int x, int y, int z, long seed);
@@ -9,8 +9,6 @@ package com.dfsek.terra.addons.biome.image;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import java.util.function.Supplier;
import com.dfsek.terra.addons.biome.image.config.ImageProviderTemplate; import com.dfsek.terra.addons.biome.image.config.ImageProviderTemplate;
import com.dfsek.terra.addons.biome.image.config.converter.ClosestBiomeColorConverterTemplate; import com.dfsek.terra.addons.biome.image.config.converter.ClosestBiomeColorConverterTemplate;
import com.dfsek.terra.addons.biome.image.config.converter.ExactBiomeColorConverterTemplate; import com.dfsek.terra.addons.biome.image.config.converter.ExactBiomeColorConverterTemplate;
@@ -29,6 +27,8 @@ import com.dfsek.terra.api.util.reflection.TypeKey;
import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import java.util.function.Supplier;
public class ImageBiomeProviderAddon implements AddonInitializer { public class ImageBiomeProviderAddon implements AddonInitializer {
public static final TypeKey<Supplier<ObjectTemplate<BiomeProvider>>> PROVIDER_REGISTRY_KEY = new TypeKey<>() { public static final TypeKey<Supplier<ObjectTemplate<BiomeProvider>>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {
@@ -1,10 +1,5 @@
package com.dfsek.terra.addons.biome.pipeline; package com.dfsek.terra.addons.biome.pipeline;
import com.dfsek.terra.addons.biome.pipeline.api.BiomeChunk;
import com.dfsek.terra.addons.biome.pipeline.api.Pipeline;
import com.dfsek.terra.addons.biome.pipeline.api.SeededVector;
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache; import com.github.benmanes.caffeine.cache.LoadingCache;
@@ -14,6 +9,11 @@ import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.stream.StreamSupport; import java.util.stream.StreamSupport;
import com.dfsek.terra.addons.biome.pipeline.api.BiomeChunk;
import com.dfsek.terra.addons.biome.pipeline.api.Pipeline;
import com.dfsek.terra.addons.biome.pipeline.api.SeededVector;
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.registry.key.StringIdentifiable; import com.dfsek.terra.api.registry.key.StringIdentifiable;
import com.dfsek.terra.api.util.Column; import com.dfsek.terra.api.util.Column;
@@ -1,7 +1,7 @@
package com.dfsek.terra.addons.biome.pipeline.api; package com.dfsek.terra.addons.biome.pipeline.api;
import com.dfsek.terra.addons.biome.pipeline.pipeline.BiomeChunkImpl;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome; import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.pipeline.BiomeChunkImpl;
public interface Stage { public interface Stage {
@@ -1,9 +1,9 @@
package com.dfsek.terra.addons.biome.pipeline.api.biome; package com.dfsek.terra.addons.biome.pipeline.api.biome;
import com.dfsek.terra.api.world.biome.Biome;
import java.util.Set; import java.util.Set;
import com.dfsek.terra.api.world.biome.Biome;
public final class DelegatedPipelineBiome implements PipelineBiome { public final class DelegatedPipelineBiome implements PipelineBiome {
private final Biome biome; private final Biome biome;
@@ -14,10 +14,10 @@ import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import java.util.List; import java.util.List;
import com.dfsek.terra.addons.biome.pipeline.pipeline.PipelineImpl;
import com.dfsek.terra.addons.biome.pipeline.PipelineBiomeProvider; import com.dfsek.terra.addons.biome.pipeline.PipelineBiomeProvider;
import com.dfsek.terra.addons.biome.pipeline.api.Source; import com.dfsek.terra.addons.biome.pipeline.api.Source;
import com.dfsek.terra.addons.biome.pipeline.api.Stage; import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.pipeline.PipelineImpl;
import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
@@ -29,7 +29,7 @@ public class BiomePipelineTemplate implements ObjectTemplate<BiomeProvider> {
@Default @Default
@Description(""" @Description("""
The resolution at which to sample biomes. The resolution at which to sample biomes.
Larger values are quadratically faster, but produce lower quality results. Larger values are quadratically faster, but produce lower quality results.
For example, a value of 3 would sample every 3 blocks.""") For example, a value of 3 would sample every 3 blocks.""")
protected @Meta int resolution = 1; protected @Meta int resolution = 1;
@@ -10,9 +10,9 @@ package com.dfsek.terra.addons.biome.pipeline.config.source;
import com.dfsek.tectonic.api.config.template.annotations.Description; import com.dfsek.tectonic.api.config.template.annotations.Description;
import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.terra.addons.biome.pipeline.source.SamplerSource;
import com.dfsek.terra.addons.biome.pipeline.api.Source; import com.dfsek.terra.addons.biome.pipeline.api.Source;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome; import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.source.SamplerSource;
import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.config.meta.Meta;
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;
@@ -1,8 +1,8 @@
package com.dfsek.terra.addons.biome.pipeline.stage.expander; package com.dfsek.terra.addons.biome.pipeline.stage.expander;
import com.dfsek.terra.addons.biome.pipeline.pipeline.BiomeChunkImpl;
import com.dfsek.terra.addons.biome.pipeline.api.Expander; import com.dfsek.terra.addons.biome.pipeline.api.Expander;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome; import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.pipeline.BiomeChunkImpl;
import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.noise.NoiseSampler;
@@ -14,9 +14,9 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.function.Predicate; import java.util.function.Predicate;
import com.dfsek.terra.addons.biome.pipeline.pipeline.BiomeChunkImpl;
import com.dfsek.terra.addons.biome.pipeline.api.Stage; import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome; import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.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 com.dfsek.terra.api.util.vector.Vector2Int; import com.dfsek.terra.api.util.vector.Vector2Int;
@@ -13,9 +13,9 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.function.Predicate; import java.util.function.Predicate;
import com.dfsek.terra.addons.biome.pipeline.pipeline.BiomeChunkImpl;
import com.dfsek.terra.addons.biome.pipeline.api.Stage; import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome; import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.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 com.dfsek.terra.api.util.vector.Vector2Int; import com.dfsek.terra.api.util.vector.Vector2Int;
@@ -7,17 +7,17 @@
package com.dfsek.terra.addons.biome.pipeline.stage.mutators; package com.dfsek.terra.addons.biome.pipeline.stage.mutators;
import com.dfsek.terra.addons.biome.pipeline.pipeline.BiomeChunkImpl;
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.stream.Stream; import java.util.stream.Stream;
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.pipeline.BiomeChunkImpl;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
public class ReplaceListStage implements Stage { public class ReplaceListStage implements Stage {
private final Map<PipelineBiome, ProbabilityCollection<PipelineBiome>> replace; private final Map<PipelineBiome, ProbabilityCollection<PipelineBiome>> replace;
@@ -11,9 +11,9 @@ import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.stream.Stream; import java.util.stream.Stream;
import com.dfsek.terra.addons.biome.pipeline.pipeline.BiomeChunkImpl;
import com.dfsek.terra.addons.biome.pipeline.api.Stage; import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome; import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.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;
@@ -9,9 +9,9 @@ package com.dfsek.terra.addons.biome.pipeline.stage.mutators;
import java.util.Objects; import java.util.Objects;
import com.dfsek.terra.addons.biome.pipeline.pipeline.BiomeChunkImpl;
import com.dfsek.terra.addons.biome.pipeline.api.Stage; import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome; import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.pipeline.BiomeChunkImpl;
import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.noise.NoiseSampler;
@@ -1,8 +1,6 @@
package com.dfsek.terra.addons.commands.structure; package com.dfsek.terra.addons.commands.structure;
import java.util.random.RandomGenerator;
import java.util.random.RandomGeneratorFactory;
import org.incendo.cloud.CommandManager; import org.incendo.cloud.CommandManager;
import org.incendo.cloud.component.DefaultValue; import org.incendo.cloud.component.DefaultValue;
import org.incendo.cloud.context.CommandContext; import org.incendo.cloud.context.CommandContext;
@@ -10,7 +8,8 @@ import org.incendo.cloud.description.Description;
import org.incendo.cloud.parser.standard.EnumParser; import org.incendo.cloud.parser.standard.EnumParser;
import org.incendo.cloud.parser.standard.LongParser; import org.incendo.cloud.parser.standard.LongParser;
import java.util.Random; 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;
@@ -7,11 +7,11 @@
package com.dfsek.terra.addons.biome.holder; package com.dfsek.terra.addons.biome.holder;
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
import java.util.Map; import java.util.Map;
import java.util.TreeMap; import java.util.TreeMap;
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
public class PaletteHolderBuilder { public class PaletteHolderBuilder {
private final TreeMap<Integer, Palette> paletteMap = new TreeMap<>(); private final TreeMap<Integer, Palette> paletteMap = new TreeMap<>();
@@ -7,11 +7,11 @@
package com.dfsek.terra.addons.feature.distributor.distributors; package com.dfsek.terra.addons.feature.distributor.distributors;
import java.util.Set;
import com.dfsek.terra.addons.feature.distributor.util.Point; import com.dfsek.terra.addons.feature.distributor.util.Point;
import com.dfsek.terra.api.structure.feature.Distributor; import com.dfsek.terra.api.structure.feature.Distributor;
import java.util.Set;
public class PointSetDistributor implements Distributor { public class PointSetDistributor implements Distributor {
private final Set<Point> points; private final Set<Point> points;
@@ -37,6 +37,7 @@ import com.dfsek.terra.addons.noise.config.templates.noise.fractal.RidgedFractal
import com.dfsek.terra.addons.noise.config.templates.normalizer.ClampNormalizerTemplate; import com.dfsek.terra.addons.noise.config.templates.normalizer.ClampNormalizerTemplate;
import com.dfsek.terra.addons.noise.config.templates.normalizer.CubicSplineNormalizerTemplate; import com.dfsek.terra.addons.noise.config.templates.normalizer.CubicSplineNormalizerTemplate;
import com.dfsek.terra.addons.noise.config.templates.normalizer.ExpressionNormalizerTemplate; import com.dfsek.terra.addons.noise.config.templates.normalizer.ExpressionNormalizerTemplate;
import com.dfsek.terra.addons.noise.config.templates.normalizer.LinearMapNormalizerTemplate;
import com.dfsek.terra.addons.noise.config.templates.normalizer.LinearNormalizerTemplate; import com.dfsek.terra.addons.noise.config.templates.normalizer.LinearNormalizerTemplate;
import com.dfsek.terra.addons.noise.config.templates.normalizer.NormalNormalizerTemplate; import com.dfsek.terra.addons.noise.config.templates.normalizer.NormalNormalizerTemplate;
import com.dfsek.terra.addons.noise.config.templates.normalizer.PosterizationNormalizerTemplate; import com.dfsek.terra.addons.noise.config.templates.normalizer.PosterizationNormalizerTemplate;
@@ -11,14 +11,14 @@ 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 java.util.LinkedHashMap;
import java.util.Map;
import com.dfsek.terra.addons.noise.config.DimensionApplicableNoiseSampler; import com.dfsek.terra.addons.noise.config.DimensionApplicableNoiseSampler;
import com.dfsek.terra.addons.noise.config.templates.FunctionTemplate; import com.dfsek.terra.addons.noise.config.templates.FunctionTemplate;
import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.properties.Properties; import com.dfsek.terra.api.properties.Properties;
import java.util.LinkedHashMap;
import java.util.Map;
@SuppressWarnings("FieldMayBeFinal") @SuppressWarnings("FieldMayBeFinal")
public class NoiseConfigPackTemplate implements ConfigTemplate, Properties { public class NoiseConfigPackTemplate implements ConfigTemplate, Properties {
@@ -11,12 +11,12 @@ 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.config.meta.Meta;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import com.dfsek.terra.api.config.meta.Meta;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class FunctionTemplate implements ObjectTemplate<FunctionTemplate> { public class FunctionTemplate implements ObjectTemplate<FunctionTemplate> {
@@ -34,11 +34,11 @@ public class CellularNoiseTemplate extends NoiseTemplate<CellularSampler> {
@Value("lookup") @Value("lookup")
@Default @Default
private @Meta NoiseSampler lookup = new OpenSimplex2Sampler(); private @Meta NoiseSampler lookup = new OpenSimplex2Sampler();
@Value("salt-lookup") @Value("salt-lookup")
@Default @Default
private @Meta boolean saltLookup = true; private @Meta boolean saltLookup = true;
@Override @Override
public NoiseSampler get() { public NoiseSampler get() {
CellularSampler sampler = new CellularSampler(); CellularSampler sampler = new CellularSampler();
@@ -9,21 +9,21 @@ import com.dfsek.terra.api.noise.NoiseSampler;
public class LinearMapNormalizerTemplate extends NormalizerTemplate<LinearMapNormalizer> { public class LinearMapNormalizerTemplate extends NormalizerTemplate<LinearMapNormalizer> {
@Value("from.a") @Value("from.a")
@Default @Default
private @Meta double aFrom = -1; private @Meta double aFrom = -1;
@Value("from.b") @Value("from.b")
@Default @Default
private @Meta double bFrom = 1; private @Meta double bFrom = 1;
@Value("to.a") @Value("to.a")
private @Meta double aTo; private @Meta double aTo;
@Value("to.b") @Value("to.b")
private @Meta double bTo; private @Meta double bTo;
@Override @Override
public NoiseSampler get() { public NoiseSampler get() {
return new LinearMapNormalizer(function, aFrom, aTo, bFrom, bTo); return new LinearMapNormalizer(function, aFrom, aTo, bFrom, bTo);
@@ -4,15 +4,15 @@ import com.dfsek.terra.api.noise.NoiseSampler;
public class LinearMapNormalizer extends Normalizer { public class LinearMapNormalizer extends Normalizer {
private final double aFrom; private final double aFrom;
private final double aTo; private final double aTo;
private final double bFrom; private final double bFrom;
private final double bTo; private final double bTo;
public LinearMapNormalizer(NoiseSampler sampler, double aFrom, double aTo, double bFrom, double bTo) { public LinearMapNormalizer(NoiseSampler sampler, double aFrom, double aTo, double bFrom, double bTo) {
super(sampler); super(sampler);
this.aFrom = aFrom; this.aFrom = aFrom;
@@ -20,7 +20,7 @@ public class LinearMapNormalizer extends Normalizer {
this.bFrom = bFrom; this.bFrom = bFrom;
this.bTo = bTo; this.bTo = bTo;
} }
@Override @Override
public double normalize(double in) { public double normalize(double in) {
return (in - aFrom) * (aTo - bTo) / (aFrom - bFrom) + aTo; return (in - aFrom) * (aTo - bTo) / (aFrom - bFrom) + aTo;
@@ -7,10 +7,10 @@
package com.dfsek.terra.addons.noise.samplers; package com.dfsek.terra.addons.noise.samplers;
import com.dfsek.terra.api.noise.NoiseSampler;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import com.dfsek.terra.api.noise.NoiseSampler;
public class ImageSampler implements NoiseSampler { public class ImageSampler implements NoiseSampler {
private final BufferedImage image; private final BufferedImage image;
@@ -197,9 +197,9 @@ public class CellularSampler extends NoiseFunction {
private double jitterModifier = 1.0; private double jitterModifier = 1.0;
private NoiseSampler noiseLookup; private NoiseSampler noiseLookup;
private boolean saltLookup; private boolean saltLookup;
public CellularSampler() { public CellularSampler() {
noiseLookup = new OpenSimplex2Sampler(); noiseLookup = new OpenSimplex2Sampler();
} }
@@ -219,11 +219,11 @@ public class CellularSampler extends NoiseFunction {
public void setReturnType(ReturnType returnType) { public void setReturnType(ReturnType returnType) {
this.returnType = returnType; this.returnType = returnType;
} }
public void setSaltLookup(boolean saltLookup) { public void setSaltLookup(boolean saltLookup) {
this.saltLookup = saltLookup; this.saltLookup = saltLookup;
} }
@Override @Override
public double getNoiseRaw(long sl, double x, double y) { public double getNoiseRaw(long sl, double x, double y) {
int seed = (int) sl; int seed = (int) sl;
@@ -384,7 +384,8 @@ public class CellularSampler extends NoiseFunction {
case Distance2Mul -> distance1 * distance0 * 0.5 - 1; case Distance2Mul -> distance1 * distance0 * 0.5 - 1;
case Distance2Div -> distance0 / distance1 - 1; case Distance2Div -> distance0 / distance1 - 1;
case NoiseLookup -> noiseLookup.noise(sl - (saltLookup ? 0 : salt), centerX, centerY, centerZ); case NoiseLookup -> noiseLookup.noise(sl - (saltLookup ? 0 : salt), centerX, centerY, centerZ);
case LocalNoiseLookup -> noiseLookup.noise(sl - (saltLookup ? 0 : salt), x / frequency - centerX, y / frequency - centerY, z / frequency - centerZ); case LocalNoiseLookup -> noiseLookup.noise(sl - (saltLookup ? 0 : salt), x / frequency - centerX, y / frequency - centerY,
z / frequency - centerZ);
case Distance3 -> distance2 - 1; case Distance3 -> distance2 - 1;
case Distance3Add -> (distance2 + distance0) * 0.5 - 1; case Distance3Add -> (distance2 + distance0) * 0.5 - 1;
case Distance3Sub -> distance2 - distance0 - 1; case Distance3Sub -> distance2 - distance0 - 1;
@@ -11,12 +11,12 @@ 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.config.meta.Meta;
import com.dfsek.terra.api.structure.configured.ConfiguredStructure;
import java.util.Collections; import java.util.Collections;
import java.util.Set; import java.util.Set;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.structure.configured.ConfiguredStructure;
@SuppressWarnings("FieldMayBeFinal") @SuppressWarnings("FieldMayBeFinal")
public class BiomeStructuresTemplate implements ObjectTemplate<BiomeStructures> { public class BiomeStructuresTemplate implements ObjectTemplate<BiomeStructures> {
@@ -11,6 +11,13 @@ import com.dfsek.tectonic.api.config.template.dynamic.DynamicTemplate;
import com.dfsek.tectonic.api.config.template.dynamic.DynamicValue; import com.dfsek.tectonic.api.config.template.dynamic.DynamicValue;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
import com.dfsek.terra.addons.generation.feature.config.BiomeFeatures; import com.dfsek.terra.addons.generation.feature.config.BiomeFeatures;
import com.dfsek.terra.addons.generation.feature.config.FeatureStageTemplate; import com.dfsek.terra.addons.generation.feature.config.FeatureStageTemplate;
import com.dfsek.terra.addons.manifest.api.AddonInitializer; import com.dfsek.terra.addons.manifest.api.AddonInitializer;
@@ -28,9 +35,6 @@ import com.dfsek.terra.api.util.reflection.TypeKey;
import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.chunk.generation.stage.GenerationStage; import com.dfsek.terra.api.world.chunk.generation.stage.GenerationStage;
import java.util.*;
import java.util.function.Supplier;
public class FeatureGenerationAddon implements AddonInitializer { public class FeatureGenerationAddon implements AddonInitializer {
public static final TypeKey<Supplier<ObjectTemplate<GenerationStage>>> STAGE_TYPE_KEY = new TypeKey<>() { public static final TypeKey<Supplier<ObjectTemplate<GenerationStage>>> STAGE_TYPE_KEY = new TypeKey<>() {
@@ -3,11 +3,11 @@ package com.dfsek.terra.addons.image.config.image;
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 java.io.IOException;
import com.dfsek.terra.addons.image.image.Image; import com.dfsek.terra.addons.image.image.Image;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
import java.io.IOException;
public class ImageTemplate implements ObjectTemplate<Image> { public class ImageTemplate implements ObjectTemplate<Image> {
@@ -4,14 +4,14 @@ import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import java.util.function.Supplier; import java.util.function.Supplier;
import com.dfsek.terra.addons.biome.pipeline.image.config.ImageSourceTemplate;
import com.dfsek.terra.addons.biome.pipeline.image.config.converter.ClosestPipelineBiomeColorConverterTemplate;
import com.dfsek.terra.addons.biome.pipeline.image.config.converter.ExactPipelineBiomeColorConverterTemplate;
import com.dfsek.terra.addons.biome.pipeline.image.config.converter.mapping.DefinedPipelineBiomeColorMappingTemplate;
import com.dfsek.terra.addons.biome.pipeline.BiomePipelineAddon; import com.dfsek.terra.addons.biome.pipeline.BiomePipelineAddon;
import com.dfsek.terra.addons.biome.pipeline.api.Source; import com.dfsek.terra.addons.biome.pipeline.api.Source;
import com.dfsek.terra.addons.biome.pipeline.api.biome.DelegatedPipelineBiome; import com.dfsek.terra.addons.biome.pipeline.api.biome.DelegatedPipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome; import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.image.config.ImageSourceTemplate;
import com.dfsek.terra.addons.biome.pipeline.image.config.converter.ClosestPipelineBiomeColorConverterTemplate;
import com.dfsek.terra.addons.biome.pipeline.image.config.converter.ExactPipelineBiomeColorConverterTemplate;
import com.dfsek.terra.addons.biome.pipeline.image.config.converter.mapping.DefinedPipelineBiomeColorMappingTemplate;
import com.dfsek.terra.addons.image.converter.ColorConverter; import com.dfsek.terra.addons.image.converter.ColorConverter;
import com.dfsek.terra.addons.image.converter.mapping.BiomeDefinedColorMapping; import com.dfsek.terra.addons.image.converter.mapping.BiomeDefinedColorMapping;
import com.dfsek.terra.addons.image.converter.mapping.ColorMapping; import com.dfsek.terra.addons.image.converter.mapping.ColorMapping;
@@ -3,9 +3,9 @@ package com.dfsek.terra.addons.biome.pipeline.image.config;
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.addons.biome.pipeline.image.ImageSource;
import com.dfsek.terra.addons.biome.pipeline.api.Source; import com.dfsek.terra.addons.biome.pipeline.api.Source;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome; import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.image.ImageSource;
import com.dfsek.terra.addons.image.colorsampler.ColorSampler; import com.dfsek.terra.addons.image.colorsampler.ColorSampler;
import com.dfsek.terra.addons.image.converter.ColorConverter; import com.dfsek.terra.addons.image.converter.ColorConverter;
@@ -1,5 +1,7 @@
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;
@@ -9,8 +11,6 @@ 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;
@@ -7,13 +7,13 @@
package com.dfsek.terra.addons.terrascript.script.builders; package com.dfsek.terra.addons.terrascript.script.builders;
import java.util.List;
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.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
import com.dfsek.terra.addons.terrascript.script.functions.CheckBlockFunction; import com.dfsek.terra.addons.terrascript.script.functions.CheckBlockFunction;
import com.dfsek.terra.addons.terrascript.tokenizer.Position; import com.dfsek.terra.addons.terrascript.tokenizer.Position;
import java.util.List;
public class CheckBlockFunctionBuilder implements FunctionBuilder<CheckBlockFunction> { public class CheckBlockFunctionBuilder implements FunctionBuilder<CheckBlockFunction> {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@@ -7,6 +7,9 @@
package com.dfsek.terra.addons.terrascript.script.builders; package com.dfsek.terra.addons.terrascript.script.builders;
import java.util.List;
import java.util.function.BiConsumer;
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;
@@ -15,9 +18,6 @@ import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments;
import com.dfsek.terra.addons.terrascript.tokenizer.Position; import com.dfsek.terra.addons.terrascript.tokenizer.Position;
import java.util.List;
import java.util.function.BiConsumer;
public class UnaryBooleanFunctionBuilder implements FunctionBuilder<Function<Void>> { public class UnaryBooleanFunctionBuilder implements FunctionBuilder<Function<Void>> {
@@ -7,10 +7,10 @@
package com.dfsek.terra.api.config; package com.dfsek.terra.api.config;
import com.dfsek.terra.api.Platform;
import java.util.List; import java.util.List;
import com.dfsek.terra.api.Platform;
public interface PluginConfig { public interface PluginConfig {
void load(Platform platform); void load(Platform platform);
@@ -1,10 +1,10 @@
package com.dfsek.terra.api.event.events.platform; package com.dfsek.terra.api.event.events.platform;
import org.incendo.cloud.CommandManager;
import com.dfsek.terra.api.command.CommandSender; import com.dfsek.terra.api.command.CommandSender;
import com.dfsek.terra.api.event.events.Event; import com.dfsek.terra.api.event.events.Event;
import org.incendo.cloud.CommandManager;
public class CommandRegistrationEvent implements Event { public class CommandRegistrationEvent implements Event {
private final CommandManager<CommandSender> commandManager; private final CommandManager<CommandSender> commandManager;
@@ -298,7 +298,7 @@ public abstract class AbstractPlatform implements Platform {
Map<String, List<String>> resources = new Yaml().load(resourceYaml); Map<String, List<String>> resources = new Yaml().load(resourceYaml);
resources.forEach((dir, entries) -> entries.forEach(entry -> { resources.forEach((dir, entries) -> entries.forEach(entry -> {
String resourceClassPath = dir + "/" + entry; String resourceClassPath = dir + "/" + entry;
if (ignoredResources.contains(dir) || ignoredResources.contains(entry) || ignoredResources.contains(resourceClassPath)) { if(ignoredResources.contains(dir) || ignoredResources.contains(entry) || ignoredResources.contains(resourceClassPath)) {
logger.info("Not dumping resource {} because it is ignored.", resourceClassPath); logger.info("Not dumping resource {} because it is ignored.", resourceClassPath);
} else { } else {
String resourcePath = resourceClassPath.replace('/', File.separatorChar); String resourcePath = resourceClassPath.replace('/', File.separatorChar);
@@ -24,15 +24,14 @@ import com.dfsek.tectonic.api.depth.DepthTracker;
import com.dfsek.tectonic.api.exception.LoadException; import com.dfsek.tectonic.api.exception.LoadException;
import com.dfsek.tectonic.api.loader.ConfigLoader; import com.dfsek.tectonic.api.loader.ConfigLoader;
import com.dfsek.tectonic.api.preprocessor.Result; import com.dfsek.tectonic.api.preprocessor.Result;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.util.reflection.TypeKey;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.lang.reflect.AnnotatedType; import java.lang.reflect.AnnotatedType;
import java.util.Map; import java.util.Map;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.util.reflection.TypeKey;
public class MetaNumberPreprocessor extends MetaPreprocessor<Meta> { public class MetaNumberPreprocessor extends MetaPreprocessor<Meta> {
public static final TypeKey<String> META_STRING_KEY = new TypeKey<@Meta String>() { public static final TypeKey<String> META_STRING_KEY = new TypeKey<@Meta String>() {
@@ -17,8 +17,6 @@
package registry; package registry;
import org.junit.jupiter.api.Test;
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.exception.DuplicateEntryException; import com.dfsek.terra.api.registry.exception.DuplicateEntryException;
@@ -27,7 +25,10 @@ import com.dfsek.terra.api.util.reflection.TypeKey;
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 static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
public class RegistryTest { public class RegistryTest {
@@ -28,7 +28,6 @@ import org.slf4j.LoggerFactory;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.random.RandomGenerator;
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;
@@ -1,9 +1,9 @@
package com.dfsek.terra.bukkit.world; package com.dfsek.terra.bukkit.world;
import com.dfsek.terra.api.world.info.WorldProperties;
import org.bukkit.generator.WorldInfo; import org.bukkit.generator.WorldInfo;
import com.dfsek.terra.api.world.info.WorldProperties;
public class BukkitWorldProperties implements WorldProperties { public class BukkitWorldProperties implements WorldProperties {
private final WorldInfo delegate; private final WorldInfo delegate;
@@ -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
@@ -6,7 +6,6 @@ import com.dfsek.tectonic.api.exception.LoadException;
import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.Enchantment;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnGroup; import net.minecraft.entity.SpawnGroup;
import net.minecraft.entity.boss.dragon.EnderDragonFight;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.sound.BiomeAdditionsSound; import net.minecraft.sound.BiomeAdditionsSound;
@@ -30,7 +29,6 @@ import org.jetbrains.annotations.NotNull;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import com.dfsek.terra.AbstractPlatform; import com.dfsek.terra.AbstractPlatform;
@@ -79,29 +77,29 @@ public abstract class ModPlatform extends AbstractPlatform {
public void register(TypeRegistry registry) { public void register(TypeRegistry registry) {
super.register(registry); super.register(registry);
registry.registerLoader(PlatformBiome.class, (type, o, loader, depthTracker) -> parseBiome((String) o, depthTracker)) registry.registerLoader(PlatformBiome.class, (type, o, loader, depthTracker) -> parseBiome((String) o, depthTracker))
.registerLoader(Identifier.class, (type, o, loader, depthTracker) -> { .registerLoader(Identifier.class, (type, o, loader, depthTracker) -> {
Identifier identifier = Identifier.tryParse((String) o); Identifier identifier = Identifier.tryParse((String) o);
if(identifier == null) if(identifier == null)
throw new LoadException("Invalid identifier: " + o, depthTracker); throw new LoadException("Invalid identifier: " + o, depthTracker);
return identifier; return identifier;
}) })
.registerLoader(Precipitation.class, (type, o, loader, depthTracker) -> Precipitation.valueOf(((String) o).toUpperCase())) .registerLoader(Precipitation.class, (type, o, loader, depthTracker) -> Precipitation.valueOf(((String) o).toUpperCase()))
.registerLoader(GrassColorModifier.class, .registerLoader(GrassColorModifier.class,
(type, o, loader, depthTracker) -> GrassColorModifier.valueOf(((String) o).toUpperCase())) (type, o, loader, depthTracker) -> GrassColorModifier.valueOf(((String) o).toUpperCase()))
.registerLoader(TemperatureModifier.class, .registerLoader(TemperatureModifier.class,
(type, o, loader, depthTracker) -> TemperatureModifier.valueOf(((String) o).toUpperCase())) (type, o, loader, depthTracker) -> TemperatureModifier.valueOf(((String) o).toUpperCase()))
.registerLoader(SpawnGroup.class, (type, o, loader, depthTracker) -> SpawnGroup.valueOf((String) o)) .registerLoader(SpawnGroup.class, (type, o, loader, depthTracker) -> SpawnGroup.valueOf((String) o))
.registerLoader(BiomeParticleConfig.class, BiomeParticleConfigTemplate::new) .registerLoader(BiomeParticleConfig.class, BiomeParticleConfigTemplate::new)
.registerLoader(SoundEvent.class, SoundEventTemplate::new) .registerLoader(SoundEvent.class, SoundEventTemplate::new)
.registerLoader(BiomeMoodSound.class, BiomeMoodSoundTemplate::new) .registerLoader(BiomeMoodSound.class, BiomeMoodSoundTemplate::new)
.registerLoader(BiomeAdditionsSound.class, BiomeAdditionsSoundTemplate::new) .registerLoader(BiomeAdditionsSound.class, BiomeAdditionsSoundTemplate::new)
.registerLoader(MusicSound.class, MusicSoundTemplate::new) .registerLoader(MusicSound.class, MusicSoundTemplate::new)
.registerLoader(EntityType.class, EntityTypeTemplate::new) .registerLoader(EntityType.class, EntityTypeTemplate::new)
.registerLoader(SpawnCostConfig.class, SpawnCostConfig::new) .registerLoader(SpawnCostConfig.class, SpawnCostConfig::new)
.registerLoader(SpawnEntry.class, SpawnEntryTemplate::new) .registerLoader(SpawnEntry.class, SpawnEntryTemplate::new)
.registerLoader(SpawnTypeConfig.class, SpawnTypeConfig::new) .registerLoader(SpawnTypeConfig.class, SpawnTypeConfig::new)
.registerLoader(SpawnSettings.class, SpawnSettingsTemplate::new) .registerLoader(SpawnSettings.class, SpawnSettingsTemplate::new)
.registerLoader(VillagerType.class, VillagerTypeTemplate::new); .registerLoader(VillagerType.class, VillagerTypeTemplate::new);
} }
private ProtoPlatformBiome parseBiome(String id, DepthTracker tracker) throws LoadException { private ProtoPlatformBiome parseBiome(String id, DepthTracker tracker) throws LoadException {
@@ -3,23 +3,22 @@ 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 net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.sound.MusicSound; import net.minecraft.sound.MusicSound;
import net.minecraft.sound.SoundEvent; import net.minecraft.sound.SoundEvent;
import com.dfsek.terra.api.util.Range;
public class MusicSoundTemplate implements ObjectTemplate<MusicSound> { public class MusicSoundTemplate implements ObjectTemplate<MusicSound> {
@Value("sound") @Value("sound")
@Default @Default
private SoundEvent sound = null; private SoundEvent sound = null;
@Value("delay") @Value("delay")
@Default @Default
private Range delay = null; private Range delay = null;
@Value("replace-current-music") @Value("replace-current-music")
@Default @Default
private Boolean replaceCurrentMusic = null; private Boolean replaceCurrentMusic = null;
@@ -3,12 +3,11 @@ 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 net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.world.biome.SpawnSettings.SpawnEntry; import net.minecraft.world.biome.SpawnSettings.SpawnEntry;
import com.dfsek.terra.api.util.Range;
public class SpawnEntryTemplate implements ObjectTemplate<SpawnEntry> { public class SpawnEntryTemplate implements ObjectTemplate<SpawnEntry> {
@Value("type") @Value("type")
@@ -18,11 +17,11 @@ public class SpawnEntryTemplate implements ObjectTemplate<SpawnEntry> {
@Value("weight") @Value("weight")
@Default @Default
private Integer weight = null; private Integer weight = null;
@Value("group-size") @Value("group-size")
@Default @Default
private Range groupSize = null; private Range groupSize = null;
@Override @Override
public SpawnEntry get() { public SpawnEntry get() {
return new SpawnEntry(type, weight, groupSize.getMin(), groupSize.getMax()); return new SpawnEntry(type, weight, groupSize.getMin(), groupSize.getMax());
@@ -71,9 +71,10 @@ public final class Codecs {
MinecraftChunkGeneratorWrapper::new)) MinecraftChunkGeneratorWrapper::new))
); );
public static final MapCodec<TerraIntProvider> TERRA_CONSTANT_RANGE_INT_PROVIDER_TYPE = RecordCodecBuilder.mapCodec(range -> range.group( public static final MapCodec<TerraIntProvider> TERRA_CONSTANT_RANGE_INT_PROVIDER_TYPE = RecordCodecBuilder.mapCodec(
Codec.INT.fieldOf("min").stable().forGetter(TerraIntProvider::getMin), range -> range.group(
Codec.INT.fieldOf("max").stable().forGetter(TerraIntProvider::getMax)) Codec.INT.fieldOf("min").stable().forGetter(TerraIntProvider::getMin),
.apply(range, range.stable((min, max) -> new TerraIntProvider(new ConstantRange( Codec.INT.fieldOf("max").stable().forGetter(TerraIntProvider::getMax))
min, max))))); .apply(range, range.stable((min, max) -> new TerraIntProvider(new ConstantRange(
min, max)))));
} }
@@ -35,7 +35,6 @@ import net.minecraft.world.StructureWorldAccess;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.source.BiomeAccess; import net.minecraft.world.biome.source.BiomeAccess;
import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.dimension.NetherPortal;
import net.minecraft.world.gen.GenerationStep.Carver; 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;
@@ -1,36 +1,21 @@
package com.dfsek.terra.mod.mixin.generalize; package com.dfsek.terra.mod.mixin.generalize;
import net.minecraft.block.entity.SignText;
import net.minecraft.client.render.DimensionEffects;
import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.registry.DynamicRegistryManager;
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.server.MinecraftServer;
import net.minecraft.server.WorldGenerationProgressListener;
import net.minecraft.server.world.ServerWorld; import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.random.RandomSequencesState;
import net.minecraft.util.profiler.Profiler; import net.minecraft.util.profiler.Profiler;
import net.minecraft.village.raid.RaidManager; import net.minecraft.village.raid.RaidManager;
import net.minecraft.world.MutableWorldProperties; import net.minecraft.world.MutableWorldProperties;
import net.minecraft.world.World; import net.minecraft.world.World;
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.level.ServerWorldProperties;
import net.minecraft.world.level.storage.LevelStorage;
import net.minecraft.world.level.storage.LevelStorage.Session;
import net.minecraft.world.spawner.SpecialSpawner;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Redirect;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.function.Supplier; import java.util.function.Supplier;
@@ -43,18 +28,23 @@ public abstract class ServerWorldMixin extends World {
maxChainedNeighborUpdates); maxChainedNeighborUpdates);
} }
@Redirect(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/registry/entry/RegistryEntry;matchesKey(Lnet/minecraft/registry/RegistryKey;)Z")) @Redirect(method = "<init>",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/registry/entry/RegistryEntry;matchesKey(Lnet/minecraft/registry/RegistryKey;)Z"))
public <T> boolean matchesKeyProxy(RegistryEntry<T> instance, RegistryKey<T> tRegistryKey) { public <T> boolean matchesKeyProxy(RegistryEntry<T> instance, RegistryKey<T> tRegistryKey) {
if (tRegistryKey == DimensionTypes.THE_END) { if(tRegistryKey == DimensionTypes.THE_END) {
return (this.getRegistryKey() == World.END); return (this.getRegistryKey() == World.END);
} }
return instance.matchesKey(tRegistryKey); return instance.matchesKey(tRegistryKey);
} }
@Redirect(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/village/raid/RaidManager;nameFor(Lnet/minecraft/registry/entry/RegistryEntry;)Ljava/lang/String;")) @Redirect(method = "<init>",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/village/raid/RaidManager;nameFor(Lnet/minecraft/registry/entry/RegistryEntry;)" +
"Ljava/lang/String;"))
public String nameForProxy(RegistryEntry<DimensionType> dimensionTypeEntry) { public String nameForProxy(RegistryEntry<DimensionType> dimensionTypeEntry) {
RegistryEntry<DimensionType> entry = dimensionTypeEntry; RegistryEntry<DimensionType> entry = dimensionTypeEntry;
if (this.getRegistryKey() == World.END) { if(this.getRegistryKey() == World.END) {
entry = getRegistryManager().get(RegistryKeys.DIMENSION_TYPE).getEntry(DimensionTypes.THE_NETHER).orElseThrow(); entry = getRegistryManager().get(RegistryKeys.DIMENSION_TYPE).getEntry(DimensionTypes.THE_NETHER).orElseThrow();
} }
return RaidManager.nameFor(entry); return RaidManager.nameFor(entry);
@@ -1,10 +1,5 @@
package com.dfsek.terra.mod.util; package com.dfsek.terra.mod.util;
import com.dfsek.terra.mod.CommonPlatform;
import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions;
import com.dfsek.terra.mod.config.ProtoPlatformBiome;
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;
@@ -39,6 +34,9 @@ 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.api.util.ConstantRange;
import com.dfsek.terra.mod.CommonPlatform;
import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions;
import com.dfsek.terra.mod.config.ProtoPlatformBiome;
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.data.Codecs;
import com.dfsek.terra.mod.implmentation.TerraIntProvider; import com.dfsek.terra.mod.implmentation.TerraIntProvider;
@@ -77,7 +75,7 @@ public final class MinecraftUtil {
CommonPlatform.get().getConfigRegistry().forEach(pack -> { // Register all Terra biomes. CommonPlatform.get().getConfigRegistry().forEach(pack -> { // Register all Terra biomes.
PreLoadCompatibilityOptions compatibilityOptions = pack.getContext().get(PreLoadCompatibilityOptions.class); PreLoadCompatibilityOptions compatibilityOptions = pack.getContext().get(PreLoadCompatibilityOptions.class);
if (compatibilityOptions.isInjectFlora()) { if(compatibilityOptions.isInjectFlora()) {
pack.getCheckedRegistry(com.dfsek.terra.api.world.biome.Biome.class) pack.getCheckedRegistry(com.dfsek.terra.api.world.biome.Biome.class)
.forEach((id, biome) -> { .forEach((id, biome) -> {
registerFlora(biome, pack, id, biomeRegistry); registerFlora(biome, pack, id, biomeRegistry);
@@ -88,28 +86,30 @@ public final class MinecraftUtil {
} }
public static void registerFlora(com.dfsek.terra.api.world.biome.Biome biome, ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey id, Registry<net.minecraft.world.biome.Biome> biomeRegistry) { public static void registerFlora(com.dfsek.terra.api.world.biome.Biome biome, ConfigPack pack,
com.dfsek.terra.api.registry.key.RegistryKey id,
Registry<net.minecraft.world.biome.Biome> biomeRegistry) {
RegistryKey<net.minecraft.world.biome.Biome> vanillaKey = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(biomeRegistry); RegistryKey<net.minecraft.world.biome.Biome> vanillaKey = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(biomeRegistry);
biomeRegistry.getOrEmpty(vanillaKey) biomeRegistry.getOrEmpty(vanillaKey)
.ifPresentOrElse(vanillaBiome -> { .ifPresentOrElse(vanillaBiome -> {
Identifier terraBiomeIdentifier = Identifier.of("terra", MinecraftUtil.createBiomeID(pack, id)); Identifier terraBiomeIdentifier = Identifier.of("terra", MinecraftUtil.createBiomeID(pack, id));
biomeRegistry.getOrEmpty(terraBiomeIdentifier).ifPresentOrElse( biomeRegistry.getOrEmpty(terraBiomeIdentifier).ifPresentOrElse(
terraBiome -> { terraBiome -> {
List<ConfiguredFeature<?, ?>> flowerFeatures = List.copyOf( List<ConfiguredFeature<?, ?>> flowerFeatures = List.copyOf(
vanillaBiome.getGenerationSettings() vanillaBiome.getGenerationSettings()
.getFlowerFeatures()); .getFlowerFeatures());
logger.debug("Injecting flora into biome" + logger.debug("Injecting flora into biome" +
" {} : {}", terraBiomeIdentifier, " {} : {}", terraBiomeIdentifier,
flowerFeatures); flowerFeatures);
((FloraFeatureHolder) terraBiome.getGenerationSettings()).setFloraFeatures( ((FloraFeatureHolder) terraBiome.getGenerationSettings()).setFloraFeatures(
flowerFeatures); flowerFeatures);
}, },
() -> logger.error( () -> logger.error(
"No such biome: {}", "No such biome: {}",
terraBiomeIdentifier) terraBiomeIdentifier)
); );
}, },
() -> logger.error("No vanilla biome: {}", vanillaKey)); () -> logger.error("No vanilla biome: {}", vanillaKey));
} }
public static Map<Identifier, List<Identifier>> getTerraBiomeMap() { public static Map<Identifier, List<Identifier>> getTerraBiomeMap() {
@@ -47,8 +47,9 @@ public class PresetUtil {
platform.multiNoiseBiomeSourceParameterListRegistry(); platform.multiNoiseBiomeSourceParameterListRegistry();
Identifier generatorID = Identifier.tryParse("terra:" + pack.getID().toLowerCase(Locale.ROOT) + "/" + pack.getNamespace().toLowerCase( Identifier generatorID = Identifier.tryParse(
Locale.ROOT)); "terra:" + pack.getID().toLowerCase(Locale.ROOT) + "/" + pack.getNamespace().toLowerCase(
Locale.ROOT));
PRESETS.add(generatorID); PRESETS.add(generatorID);
@@ -1,8 +1,5 @@
package com.dfsek.terra.lifecycle; package com.dfsek.terra.lifecycle;
import com.dfsek.terra.api.command.CommandSender;
import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent;
import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.command.ServerCommandSource;
import org.incendo.cloud.SenderMapper; import org.incendo.cloud.SenderMapper;
import org.incendo.cloud.execution.ExecutionCoordinator; import org.incendo.cloud.execution.ExecutionCoordinator;
@@ -10,6 +7,9 @@ import org.incendo.cloud.fabric.FabricServerCommandManager;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import com.dfsek.terra.api.command.CommandSender;
import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent;
public final class LifecycleEntryPoint { public final class LifecycleEntryPoint {
private static final Logger logger = LoggerFactory.getLogger(LifecycleEntryPoint.class); private static final Logger logger = LoggerFactory.getLogger(LifecycleEntryPoint.class);
@@ -4,8 +4,8 @@ import ca.solostudios.strata.Versions;
import ca.solostudios.strata.parser.tokenizer.ParseException; 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.enchantment.Enchantment; import net.minecraft.enchantment.Enchantment;
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 net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;