diff --git a/common/src/main/java/com/dfsek/terra/api/util/generic/pair/ImmutablePair.java b/common/src/main/java/com/dfsek/terra/api/util/generic/pair/ImmutablePair.java index f58cbb52b..0ca0c0ad3 100644 --- a/common/src/main/java/com/dfsek/terra/api/util/generic/pair/ImmutablePair.java +++ b/common/src/main/java/com/dfsek/terra/api/util/generic/pair/ImmutablePair.java @@ -1,10 +1,12 @@ package com.dfsek.terra.api.util.generic.pair; -public class ImmutablePair { +public final class ImmutablePair { private final L left; private final R right; - public ImmutablePair(L left, R right) { + private static final ImmutablePair NULL = new ImmutablePair<>(null, null); + + private ImmutablePair(L left, R right) { this.left = left; this.right = right; } @@ -21,7 +23,12 @@ public class ImmutablePair { return left; } + @SuppressWarnings("unchecked") + public static ImmutablePair ofNull() { + return (ImmutablePair) NULL; + } + public Pair mutable() { - return new Pair<>(left, right); + return Pair.of(left, right); } } diff --git a/common/src/main/java/com/dfsek/terra/api/util/generic/pair/Pair.java b/common/src/main/java/com/dfsek/terra/api/util/generic/pair/Pair.java index dcb0be070..5ec1ede8f 100644 --- a/common/src/main/java/com/dfsek/terra/api/util/generic/pair/Pair.java +++ b/common/src/main/java/com/dfsek/terra/api/util/generic/pair/Pair.java @@ -4,7 +4,7 @@ public class Pair { private L left; private R right; - public Pair(L left, R right) { + private Pair(L left, R right) { this.left = left; this.right = right; } @@ -30,6 +30,6 @@ public class Pair { } public ImmutablePair immutable() { - return new ImmutablePair<>(left, right); + return ImmutablePair.of(left, right); } } diff --git a/common/src/main/java/com/dfsek/terra/api/util/world/PaletteUtil.java b/common/src/main/java/com/dfsek/terra/api/util/world/PaletteUtil.java index 69edf202e..491341ad9 100644 --- a/common/src/main/java/com/dfsek/terra/api/util/world/PaletteUtil.java +++ b/common/src/main/java/com/dfsek/terra/api/util/world/PaletteUtil.java @@ -1,14 +1,13 @@ package com.dfsek.terra.api.util.world; import com.dfsek.terra.api.math.MathUtil; -import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.world.palette.Palette; import com.dfsek.terra.api.world.palette.holder.PaletteHolder; import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.world.generation.math.samplers.Sampler; public final class PaletteUtil { - public static Palette getPalette(int x, int y, int z, BiomeTemplate c, Sampler sampler) { + public static Palette getPalette(int x, int y, int z, BiomeTemplate c, Sampler sampler) { PaletteHolder slant = c.getSlantPalette(); if(slant != null && MathUtil.derivative(sampler, x, y, z) > c.getSlantThreshold()) { return slant.getPalette(y); diff --git a/common/src/main/java/com/dfsek/terra/api/world/biome/Generator.java b/common/src/main/java/com/dfsek/terra/api/world/biome/Generator.java index 539437a71..a72243739 100644 --- a/common/src/main/java/com/dfsek/terra/api/world/biome/Generator.java +++ b/common/src/main/java/com/dfsek/terra/api/world/biome/Generator.java @@ -1,7 +1,6 @@ package com.dfsek.terra.api.world.biome; import com.dfsek.terra.api.math.noise.NoiseSampler; -import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.world.palette.Palette; public interface Generator { @@ -35,7 +34,7 @@ public interface Generator { * * @return BlocPalette - The biome's palette. */ - Palette getPalette(int y); + Palette getPalette(int y); NoiseSampler getBiomeNoise(); diff --git a/common/src/main/java/com/dfsek/terra/api/world/palette/NoisePalette.java b/common/src/main/java/com/dfsek/terra/api/world/palette/NoisePalette.java index 3af3d383b..f8d3b20a6 100644 --- a/common/src/main/java/com/dfsek/terra/api/world/palette/NoisePalette.java +++ b/common/src/main/java/com/dfsek/terra/api/world/palette/NoisePalette.java @@ -1,10 +1,11 @@ package com.dfsek.terra.api.world.palette; import com.dfsek.terra.api.math.noise.NoiseSampler; +import com.dfsek.terra.api.platform.block.BlockData; import java.util.List; -public class NoisePalette extends Palette { +public class NoisePalette extends Palette { private final NoiseSampler sampler; private final boolean is2D; @@ -14,11 +15,11 @@ public class NoisePalette extends Palette { } @Override - public E get(int layer, double x, double y, double z) { - PaletteLayer paletteLayer; + public BlockData get(int layer, double x, double y, double z) { + PaletteLayer paletteLayer; if(layer > this.getSize()) paletteLayer = this.getLayers().get(this.getLayers().size() - 1); else { - List> pl = getLayers(); + List pl = getLayers(); if(layer >= pl.size()) paletteLayer = pl.get(pl.size() - 1); else paletteLayer = pl.get(layer); } diff --git a/common/src/main/java/com/dfsek/terra/api/world/palette/Palette.java b/common/src/main/java/com/dfsek/terra/api/world/palette/Palette.java index 881cd406c..fb367c191 100644 --- a/common/src/main/java/com/dfsek/terra/api/world/palette/Palette.java +++ b/common/src/main/java/com/dfsek/terra/api/world/palette/Palette.java @@ -1,6 +1,7 @@ package com.dfsek.terra.api.world.palette; import com.dfsek.terra.api.math.noise.NoiseSampler; +import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.util.GlueList; import com.dfsek.terra.api.util.collections.ProbabilityCollection; @@ -11,8 +12,8 @@ import java.util.Random; * A class representation of a "slice" of the world. * Used to get a section of blocks, based on the depth at which they are found. */ -public abstract class Palette { - private final List> pallet = new GlueList<>(); +public abstract class Palette { + private final List pallet = new GlueList<>(); /** * Constructs a blank palette. @@ -21,16 +22,16 @@ public abstract class Palette { } - public com.dfsek.terra.api.world.palette.Palette add(E m, int layers, NoiseSampler sampler) { + public com.dfsek.terra.api.world.palette.Palette add(BlockData m, int layers, NoiseSampler sampler) { for(int i = 0; i < layers; i++) { - pallet.add(new PaletteLayer<>(m, sampler)); + pallet.add(new PaletteLayer(m, sampler)); } return this; } - public com.dfsek.terra.api.world.palette.Palette add(ProbabilityCollection m, int layers, NoiseSampler sampler) { + public com.dfsek.terra.api.world.palette.Palette add(ProbabilityCollection m, int layers, NoiseSampler sampler) { for(int i = 0; i < layers; i++) { - pallet.add(new PaletteLayer<>(m, sampler)); + pallet.add(new PaletteLayer(m, sampler)); } return this; } @@ -41,25 +42,25 @@ public abstract class Palette { * @param layer - The layer at which to fetch the material. * @return BlockData - The material fetched. */ - public abstract E get(int layer, double x, double y, double z); + public abstract BlockData get(int layer, double x, double y, double z); public int getSize() { return pallet.size(); } - public List> getLayers() { + public List getLayers() { return pallet; } /** * Class representation of a layer of a BlockPalette. */ - public static class PaletteLayer { + public static class PaletteLayer { private final boolean col; // Is layer using a collection? - private ProbabilityCollection collection; + private ProbabilityCollection collection; private final NoiseSampler sampler; - private E m; + private BlockData m; /** * Constructs a PaletteLayerHolder with a ProbabilityCollection of materials and a number of layers. @@ -67,7 +68,7 @@ public abstract class Palette { * @param type The collection of materials to choose from. * @param sampler Noise sampler to use */ - public PaletteLayer(ProbabilityCollection type, NoiseSampler sampler) { + public PaletteLayer(ProbabilityCollection type, NoiseSampler sampler) { this.sampler = sampler; this.col = true; this.collection = type; @@ -79,7 +80,7 @@ public abstract class Palette { * @param type The material to use. * @param sampler Noise sampler to use */ - public PaletteLayer(E type, NoiseSampler sampler) { + public PaletteLayer(BlockData type, NoiseSampler sampler) { this.sampler = sampler; this.col = false; this.m = type; @@ -94,18 +95,18 @@ public abstract class Palette { * * @return Material - the material.. */ - public E get(Random random) { + public BlockData get(Random random) { if(col) return this.collection.get(random); return m; } - public E get(NoiseSampler random, double x, double y, double z, boolean is2D) { + public BlockData get(NoiseSampler random, double x, double y, double z, boolean is2D) { if(col && is2D) return this.collection.get(random, x, z); else if(col) return this.collection.get(random, x, y, z); return m; } - public ProbabilityCollection getCollection() { + public ProbabilityCollection getCollection() { return collection; } } diff --git a/common/src/main/java/com/dfsek/terra/api/world/palette/SinglePalette.java b/common/src/main/java/com/dfsek/terra/api/world/palette/SinglePalette.java index 06b075a2b..7b2db1fe2 100644 --- a/common/src/main/java/com/dfsek/terra/api/world/palette/SinglePalette.java +++ b/common/src/main/java/com/dfsek/terra/api/world/palette/SinglePalette.java @@ -1,14 +1,16 @@ package com.dfsek.terra.api.world.palette; -public class SinglePalette extends Palette { - private final E item; +import com.dfsek.terra.api.platform.block.BlockData; - public SinglePalette(E item) { +public class SinglePalette extends Palette { + private final BlockData item; + + public SinglePalette(BlockData item) { this.item = item; } @Override - public E get(int layer, double x, double y, double z) { + public BlockData get(int layer, double x, double y, double z) { return item; } } diff --git a/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java b/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java index 2b4704cac..743bbba14 100644 --- a/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java +++ b/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java @@ -1,16 +1,15 @@ package com.dfsek.terra.api.world.palette.holder; -import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.world.palette.Palette; public class PaletteHolder { - private final Palette[] palettes; + private final Palette[] palettes; - protected PaletteHolder(Palette[] palettes) { + protected PaletteHolder(Palette[] palettes) { this.palettes = palettes; } - public Palette getPalette(int y) { + public Palette getPalette(int y) { return palettes[y]; } } diff --git a/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java b/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java index 2cc72764b..451567113 100644 --- a/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java +++ b/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java @@ -1,6 +1,5 @@ package com.dfsek.terra.api.world.palette.holder; -import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.world.palette.Palette; import net.jafama.FastMath; @@ -8,19 +7,19 @@ import java.util.Map; import java.util.TreeMap; public class PaletteHolderBuilder { - private final TreeMap> paletteMap = new TreeMap<>(); + private final TreeMap paletteMap = new TreeMap<>(); - public PaletteHolderBuilder add(int y, Palette palette) { + public PaletteHolderBuilder add(int y, Palette palette) { paletteMap.put(y, palette); return this; } @SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"}) public PaletteHolder build() { - Palette[] palettes = new Palette[paletteMap.lastKey() + 1]; + Palette[] palettes = new Palette[paletteMap.lastKey() + 1]; for(int y = 0; y <= FastMath.max(paletteMap.lastKey(), 255); y++) { - Palette d = null; - for(Map.Entry> e : paletteMap.entrySet()) { + Palette d = null; + for(Map.Entry e : paletteMap.entrySet()) { if(e.getKey() >= y) { d = e.getValue(); break; diff --git a/common/src/main/java/com/dfsek/terra/config/factories/FloraFactory.java b/common/src/main/java/com/dfsek/terra/config/factories/FloraFactory.java index 279dbf3e4..78c2c288a 100644 --- a/common/src/main/java/com/dfsek/terra/config/factories/FloraFactory.java +++ b/common/src/main/java/com/dfsek/terra/config/factories/FloraFactory.java @@ -2,7 +2,6 @@ package com.dfsek.terra.config.factories; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.math.noise.samplers.noise.random.WhiteNoiseSampler; -import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.world.flora.Flora; import com.dfsek.terra.api.world.palette.NoisePalette; import com.dfsek.terra.api.world.palette.Palette; @@ -13,7 +12,7 @@ import com.dfsek.terra.world.population.items.flora.TerraFlora; public class FloraFactory implements ConfigFactory { @Override public TerraFlora build(FloraTemplate config, TerraPlugin main) { - Palette palette = new NoisePalette<>(new WhiteNoiseSampler(2403), false); + Palette palette = new NoisePalette(new WhiteNoiseSampler(2403), false); for(PaletteLayerHolder layer : config.getFloraPalette()) { palette.add(layer.getLayer(), layer.getSize(), layer.getSampler()); } diff --git a/common/src/main/java/com/dfsek/terra/config/factories/PaletteFactory.java b/common/src/main/java/com/dfsek/terra/config/factories/PaletteFactory.java index d4983c076..e4d9fbeda 100644 --- a/common/src/main/java/com/dfsek/terra/config/factories/PaletteFactory.java +++ b/common/src/main/java/com/dfsek/terra/config/factories/PaletteFactory.java @@ -1,16 +1,15 @@ package com.dfsek.terra.config.factories; import com.dfsek.terra.api.TerraPlugin; -import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.world.palette.NoisePalette; import com.dfsek.terra.api.world.palette.Palette; import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder; import com.dfsek.terra.config.templates.PaletteTemplate; -public class PaletteFactory implements ConfigFactory> { +public class PaletteFactory implements ConfigFactory { @Override - public Palette build(PaletteTemplate config, TerraPlugin main) { - NoisePalette palette = new NoisePalette<>(config.getNoise().apply(2403L), config.getNoise().getDimensions() == 2); + public Palette build(PaletteTemplate config, TerraPlugin main) { + NoisePalette palette = new NoisePalette(config.getNoise().apply(2403L), config.getNoise().getDimensions() == 2); for(PaletteLayerHolder layer : config.getPalette()) { palette.add(layer.getLayer(), layer.getSize(), layer.getSampler()); } diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/Types.java b/common/src/main/java/com/dfsek/terra/config/loaders/Types.java index 46c4f0978..595728d60 100644 --- a/common/src/main/java/com/dfsek/terra/config/loaders/Types.java +++ b/common/src/main/java/com/dfsek/terra/config/loaders/Types.java @@ -5,7 +5,6 @@ import com.dfsek.terra.api.platform.world.Tree; import com.dfsek.terra.api.util.collections.ProbabilityCollection; import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.flora.Flora; -import com.dfsek.terra.api.world.palette.Palette; import java.lang.reflect.Type; import java.util.Map; @@ -15,7 +14,6 @@ import java.util.Map; */ @SuppressWarnings("unused") public final class Types { - public static final Type BLOCK_DATA_PALETTE_TYPE; public static final Type BLOCK_DATA_PROBABILITY_COLLECTION_TYPE; public static final Type FLORA_PROBABILITY_COLLECTION_TYPE; public static final Type TREE_PROBABILITY_COLLECTION_TYPE; @@ -23,7 +21,6 @@ public final class Types { public static final Type TERRA_BIOME_TERRA_BIOME_PROBABILITY_COLLECTION_MAP; static { - BLOCK_DATA_PALETTE_TYPE = getType("blockDataPalette"); BLOCK_DATA_PROBABILITY_COLLECTION_TYPE = getType("blockDataProbabilityCollection"); FLORA_PROBABILITY_COLLECTION_TYPE = getType("floraProbabilityCollection"); TREE_PROBABILITY_COLLECTION_TYPE = getType("treeProbabilityCollection"); @@ -31,7 +28,6 @@ public final class Types { TERRA_BIOME_TERRA_BIOME_PROBABILITY_COLLECTION_MAP = getType("terraBiomeProbabilityCollectionMap"); } - private Palette blockDataPalette; private ProbabilityCollection blockDataProbabilityCollection; private ProbabilityCollection floraProbabilityCollection; private ProbabilityCollection treeProbabilityCollection; diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/palette/PaletteHolderLoader.java b/common/src/main/java/com/dfsek/terra/config/loaders/palette/PaletteHolderLoader.java index a0e7929e0..7dc94a21b 100644 --- a/common/src/main/java/com/dfsek/terra/config/loaders/palette/PaletteHolderLoader.java +++ b/common/src/main/java/com/dfsek/terra/config/loaders/palette/PaletteHolderLoader.java @@ -3,11 +3,9 @@ package com.dfsek.terra.config.loaders.palette; import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.TypeLoader; -import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.world.palette.Palette; import com.dfsek.terra.api.world.palette.holder.PaletteHolder; import com.dfsek.terra.api.world.palette.holder.PaletteHolderBuilder; -import com.dfsek.terra.config.loaders.Types; import java.lang.reflect.Type; import java.util.List; @@ -21,7 +19,7 @@ public class PaletteHolderLoader implements TypeLoader { PaletteHolderBuilder builder = new PaletteHolderBuilder(); for(Map layer : palette) { for(Map.Entry entry : layer.entrySet()) { - builder.add(entry.getValue(), (Palette) configLoader.loadType(Types.BLOCK_DATA_PALETTE_TYPE, entry.getKey())); + builder.add(entry.getValue(), (Palette) configLoader.loadType(Palette.class, entry.getKey())); } } return builder.build(); diff --git a/common/src/main/java/com/dfsek/terra/config/pack/ConfigPack.java b/common/src/main/java/com/dfsek/terra/config/pack/ConfigPack.java index b0dd6c03f..3de4eeb20 100644 --- a/common/src/main/java/com/dfsek/terra/config/pack/ConfigPack.java +++ b/common/src/main/java/com/dfsek/terra/config/pack/ConfigPack.java @@ -8,22 +8,16 @@ import com.dfsek.tectonic.exception.ConfigException; import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.TypeRegistry; -import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.terra.api.LoaderRegistrar; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.event.events.config.ConfigPackPostLoadEvent; import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent; -import com.dfsek.terra.api.platform.block.BlockData; -import com.dfsek.terra.api.platform.world.Tree; import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.structures.loot.LootTable; -import com.dfsek.terra.api.structures.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.api.structures.script.StructureScript; +import com.dfsek.terra.api.util.generic.pair.ImmutablePair; import com.dfsek.terra.api.util.seeded.NoiseSeeded; import com.dfsek.terra.api.world.biome.provider.BiomeProvider; -import com.dfsek.terra.api.world.flora.Flora; -import com.dfsek.terra.api.world.palette.Palette; -import com.dfsek.terra.carving.UserDefinedCarver; import com.dfsek.terra.config.builder.BiomeBuilder; import com.dfsek.terra.config.dummy.DummyWorld; import com.dfsek.terra.config.factories.ConfigFactory; @@ -40,21 +34,13 @@ import com.dfsek.terra.config.prototype.ConfigType; import com.dfsek.terra.config.prototype.ProtoConfig; import com.dfsek.terra.config.templates.AbstractableTemplate; import com.dfsek.terra.registry.OpenRegistry; -import com.dfsek.terra.registry.config.BiomeRegistry; -import com.dfsek.terra.registry.config.CarverRegistry; import com.dfsek.terra.registry.config.ConfigTypeRegistry; -import com.dfsek.terra.registry.config.FloraRegistry; import com.dfsek.terra.registry.config.FunctionRegistry; import com.dfsek.terra.registry.config.LootRegistry; import com.dfsek.terra.registry.config.NoiseRegistry; -import com.dfsek.terra.registry.config.OreRegistry; -import com.dfsek.terra.registry.config.PaletteRegistry; import com.dfsek.terra.registry.config.ScriptRegistry; -import com.dfsek.terra.registry.config.StructureRegistry; -import com.dfsek.terra.registry.config.TreeRegistry; import com.dfsek.terra.world.TerraWorld; import com.dfsek.terra.world.population.items.TerraStructure; -import com.dfsek.terra.world.population.items.ores.Ore; import org.apache.commons.io.IOUtils; import org.json.simple.parser.ParseException; @@ -73,8 +59,6 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.function.Supplier; -import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -84,17 +68,12 @@ import java.util.zip.ZipFile; public class ConfigPack implements LoaderRegistrar { private final ConfigPackTemplate template = new ConfigPackTemplate(); - private final BiomeRegistry biomeRegistry = new BiomeRegistry(); - private final StructureRegistry structureRegistry = new StructureRegistry(); - private final PaletteRegistry paletteRegistry; - private final FloraRegistry floraRegistry; - private final OreRegistry oreRegistry = new OreRegistry(); - private final TreeRegistry treeRegistry; + private final Map, ImmutablePair, CheckedRegistry>> registryMap = new HashMap<>(); + + private final ScriptRegistry scriptRegistry = new ScriptRegistry(); private final LootRegistry lootRegistry = new LootRegistry(); - private final CarverRegistry carverRegistry = new CarverRegistry(); - private final NoiseRegistry noiseRegistry = new NoiseRegistry(); private final FunctionRegistry functionRegistry = new FunctionRegistry(); @@ -112,10 +91,12 @@ public class ConfigPack implements LoaderRegistrar { public ConfigPack(File folder, TerraPlugin main) throws ConfigException { try { - floraRegistry = new FloraRegistry(main); - paletteRegistry = new PaletteRegistry(main); - treeRegistry = new TreeRegistry(); - this.configTypeRegistry = new ConfigTypeRegistry(this, main); + this.configTypeRegistry = new ConfigTypeRegistry(this, main, (id, configType) -> { + OpenRegistry openRegistry = configType.registrySupplier().get(); + selfLoader.registerLoader(configType.getTypeClass(), openRegistry); + abstractConfigLoader.registerLoader(configType.getTypeClass(), openRegistry); + registryMap.put(configType.getTypeClass(), ImmutablePair.of(openRegistry, new CheckedRegistry<>(openRegistry))); + }); this.loader = new FolderLoader(folder.toPath()); this.main = main; long l = System.nanoTime(); @@ -151,19 +132,18 @@ public class ConfigPack implements LoaderRegistrar { public ConfigPack(ZipFile file, TerraPlugin main) throws ConfigException { try { - floraRegistry = new FloraRegistry(main); - paletteRegistry = new PaletteRegistry(main); - treeRegistry = new TreeRegistry(); - this.configTypeRegistry = new ConfigTypeRegistry(this, main); + this.configTypeRegistry = new ConfigTypeRegistry(this, main, (id, configType) -> { + OpenRegistry openRegistry = configType.registrySupplier().get(); + selfLoader.registerLoader(configType.getTypeClass(), openRegistry); + abstractConfigLoader.registerLoader(configType.getTypeClass(), openRegistry); + registryMap.put(configType.getTypeClass(), ImmutablePair.of(openRegistry, new CheckedRegistry<>(openRegistry))); + }); this.loader = new ZIPLoader(file); this.main = main; long l = System.nanoTime(); - register(abstractConfigLoader); register(selfLoader); - main.register(selfLoader); - main.register(abstractConfigLoader); try { ZipEntry pack = null; @@ -202,12 +182,7 @@ public class ConfigPack implements LoaderRegistrar { } private void checkDeadEntries(TerraPlugin main) { - biomeRegistry.getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in biome registry: '" + id + "'")); - paletteRegistry.getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in palette registry: '" + id + "'")); - floraRegistry.getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in flora registry: '" + id + "'")); - carverRegistry.getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in carver registry: '" + id + "'")); - treeRegistry.getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in tree registry: '" + id + "'")); - oreRegistry.getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in ore registry: '" + id + "'")); + registryMap.forEach((clazz, pair) -> pair.getLeft().getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in '" + clazz + "' registry: '" + id + "'"))); } @@ -242,7 +217,7 @@ public class ConfigPack implements LoaderRegistrar { loader.open("", ".yml").thenEntries(entries -> entries.forEach(stream -> configurations.add(new Configuration(stream.getValue(), stream.getKey())))); - Map, List> configs = new HashMap<>(); + Map, List> configs = new HashMap<>(); for(Configuration configuration : configurations) { ProtoConfig config = new ProtoConfig(); @@ -250,7 +225,7 @@ public class ConfigPack implements LoaderRegistrar { configs.computeIfAbsent(config.getType(), configType -> new ArrayList<>()).add(configuration); } - for(ConfigType configType : configTypeRegistry.entries()) { + for(ConfigType configType : configTypeRegistry.entries()) { for(ConfigTemplate config : abstractConfigLoader.loadConfigs(configs.getOrDefault(configType, Collections.emptyList()), () -> configType.getTemplate(this, main))) { ((ConfigType) configType).callback(this, main, config); } @@ -260,16 +235,9 @@ public class ConfigPack implements LoaderRegistrar { main.logger().info("Loaded config pack \"" + template.getID() + "\" v" + template.getVersion() + " by " + template.getAuthor() + " in " + (System.nanoTime() - start) / 1000000D + "ms."); } - public TerraStructure getStructure(String id) { - return structureRegistry.get(id); - } public Set getStructures() { - return new HashSet<>(structureRegistry.entries()); - } - - public List getStructureIDs() { - return structureRegistry.entries().stream().map(terraStructure -> terraStructure.getTemplate().getID()).collect(Collectors.toList()); + return new HashSet<>(getRegistry(TerraStructure.class).entries()); } public ConfigPackTemplate getTemplate() { @@ -280,30 +248,24 @@ public class ConfigPack implements LoaderRegistrar { return varScope; } + @SuppressWarnings("unchecked") + public CheckedRegistry getRegistry(Class clazz) { + return (CheckedRegistry) registryMap.getOrDefault(clazz, ImmutablePair.ofNull()).getRight(); + } + @Override public void register(TypeRegistry registry) { registry .registerLoader(ConfigType.class, configTypeRegistry) - .registerLoader(Palette.class, paletteRegistry) - .registerLoader(BiomeBuilder.class, biomeRegistry) - .registerLoader(Flora.class, floraRegistry) - .registerLoader(Ore.class, oreRegistry) - .registerLoader(Tree.class, treeRegistry) .registerLoader(StructureScript.class, scriptRegistry) - .registerLoader(TerraStructure.class, structureRegistry) .registerLoader(LootTable.class, lootRegistry) - .registerLoader(UserDefinedCarver.class, carverRegistry) .registerLoader(BufferedImage.class, new BufferedImageLoader(loader)) .registerLoader(NoiseSeeded.class, new NoiseSamplerBuilderLoader(noiseRegistry)) .registerLoader(SingleBiomeProviderTemplate.class, SingleBiomeProviderTemplate::new) .registerLoader(BiomePipelineTemplate.class, () -> new BiomePipelineTemplate(main)) - .registerLoader(ImageProviderTemplate.class, () -> new ImageProviderTemplate(biomeRegistry)) - .registerLoader(ImageSamplerTemplate.class, () -> new ImageProviderTemplate(biomeRegistry)); - } - - public Set getCarvers() { - return new HashSet<>(carverRegistry.entries()); + .registerLoader(ImageProviderTemplate.class, () -> new ImageProviderTemplate(getRegistry(BiomeBuilder.class))) + .registerLoader(ImageSamplerTemplate.class, () -> new ImageProviderTemplate(getRegistry(BiomeBuilder.class))); } public BiomeProvider.BiomeProviderBuilder getBiomeProviderBuilder() { @@ -314,55 +276,20 @@ public class ConfigPack implements LoaderRegistrar { return new CheckedRegistry<>(scriptRegistry); } - public CheckedRegistry getBiomeRegistry() { - return new CheckedRegistry<>(biomeRegistry); - } - - public CheckedRegistry getTreeRegistry() { - return new CheckedRegistry<>(treeRegistry); - } - - public CheckedRegistry> getFunctionRegistry() { - return new CheckedRegistry<>(functionRegistry); - } - - public CheckedRegistry>> getNormalizerRegistry() { - return new CheckedRegistry<>(noiseRegistry); - } - - public CheckedRegistry getCarverRegistry() { - return new CheckedRegistry<>(carverRegistry); - } - - public CheckedRegistry getFloraRegistry() { - return new CheckedRegistry<>(floraRegistry); - } - public CheckedRegistry getLootRegistry() { return new CheckedRegistry<>(lootRegistry); } - public CheckedRegistry getOreRegistry() { - return new CheckedRegistry<>(oreRegistry); - } - public CheckedRegistry> getPaletteRegistry() { - return new CheckedRegistry<>(paletteRegistry); - } - - public CheckedRegistry getStructureRegistry() { - return new CheckedRegistry<>(structureRegistry); - } - - public WorldConfig toWorldConfig(TerraWorld world){ + public WorldConfig toWorldConfig(TerraWorld world) { return new WorldConfig(world, this, main); } - public CheckedRegistry> getConfigTypeRegistry() { - return new CheckedRegistry>(configTypeRegistry) { + public CheckedRegistry> getConfigTypeRegistry() { + return new CheckedRegistry>(configTypeRegistry) { @Override @SuppressWarnings("deprecation") - public void addUnchecked(String identifier, ConfigType value) { + public void addUnchecked(String identifier, ConfigType value) { if(contains(identifier)) throw new UnsupportedOperationException("Cannot override values in ConfigTypeRegistry!"); } }; diff --git a/common/src/main/java/com/dfsek/terra/config/pack/WorldConfig.java b/common/src/main/java/com/dfsek/terra/config/pack/WorldConfig.java index 2b2c5ed14..40fbe711c 100644 --- a/common/src/main/java/com/dfsek/terra/config/pack/WorldConfig.java +++ b/common/src/main/java/com/dfsek/terra/config/pack/WorldConfig.java @@ -1,7 +1,6 @@ package com.dfsek.terra.config.pack; import com.dfsek.terra.api.TerraPlugin; -import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.world.Tree; import com.dfsek.terra.api.registry.LockedRegistry; import com.dfsek.terra.api.structures.loot.LootTable; @@ -11,6 +10,7 @@ import com.dfsek.terra.api.world.biome.provider.BiomeProvider; import com.dfsek.terra.api.world.flora.Flora; import com.dfsek.terra.api.world.palette.Palette; import com.dfsek.terra.carving.UserDefinedCarver; +import com.dfsek.terra.config.builder.BiomeBuilder; import com.dfsek.terra.registry.OpenRegistry; import com.dfsek.terra.world.TerraWorld; import com.dfsek.terra.world.generation.math.SamplerCache; @@ -29,7 +29,7 @@ public class WorldConfig { private final LockedRegistry floraRegistry; private final LockedRegistry lootRegistry; private final LockedRegistry oreRegistry; - private final LockedRegistry> paletteRegistry; + private final LockedRegistry paletteRegistry; private final LockedRegistry structureRegistry; private final BiomeProvider provider; @@ -44,16 +44,16 @@ public class WorldConfig { this.scriptRegistry = new LockedRegistry<>(pack.getScriptRegistry()); OpenRegistry biomeOpenRegistry = new OpenRegistry<>(); - pack.getBiomeRegistry().forEach((id, biome) -> biomeOpenRegistry.add(id, biome.apply(world.getWorld().getSeed()))); + pack.getRegistry(BiomeBuilder.class).forEach((id, biome) -> biomeOpenRegistry.add(id, biome.apply(world.getWorld().getSeed()))); this.biomeRegistry = new LockedRegistry<>(biomeOpenRegistry); - this.carverRegistry = new LockedRegistry<>(pack.getCarverRegistry()); - this.treeRegistry = new LockedRegistry<>(pack.getTreeRegistry()); - this.floraRegistry = new LockedRegistry<>(pack.getFloraRegistry()); + this.carverRegistry = new LockedRegistry<>(pack.getRegistry(UserDefinedCarver.class)); + this.treeRegistry = new LockedRegistry<>(pack.getRegistry(Tree.class)); + this.floraRegistry = new LockedRegistry<>(pack.getRegistry(Flora.class)); this.lootRegistry = new LockedRegistry<>(pack.getLootRegistry()); - this.oreRegistry = new LockedRegistry<>(pack.getOreRegistry()); - this.paletteRegistry = new LockedRegistry<>(pack.getPaletteRegistry()); - this.structureRegistry = new LockedRegistry<>(pack.getStructureRegistry()); + this.oreRegistry = new LockedRegistry<>(pack.getRegistry(Ore.class)); + this.paletteRegistry = new LockedRegistry<>(pack.getRegistry(Palette.class)); + this.structureRegistry = new LockedRegistry<>(pack.getRegistry(TerraStructure.class)); this.provider = pack.getBiomeProviderBuilder().build(world.getWorld().getSeed()); } @@ -98,7 +98,7 @@ public class WorldConfig { return oreRegistry; } - public LockedRegistry> getPaletteRegistry() { + public LockedRegistry getPaletteRegistry() { return paletteRegistry; } diff --git a/common/src/main/java/com/dfsek/terra/config/prototype/ConfigType.java b/common/src/main/java/com/dfsek/terra/config/prototype/ConfigType.java index cf5a08853..4c6f66ec7 100644 --- a/common/src/main/java/com/dfsek/terra/config/prototype/ConfigType.java +++ b/common/src/main/java/com/dfsek/terra/config/prototype/ConfigType.java @@ -4,9 +4,16 @@ import com.dfsek.tectonic.config.ConfigTemplate; import com.dfsek.tectonic.exception.LoadException; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.config.pack.ConfigPack; +import com.dfsek.terra.registry.OpenRegistry; -public interface ConfigType { +import java.util.function.Supplier; + +public interface ConfigType { T getTemplate(ConfigPack pack, TerraPlugin main); void callback(ConfigPack pack, TerraPlugin main, T loadedConfig) throws LoadException; + + Class getTypeClass(); + + Supplier> registrySupplier(); } diff --git a/common/src/main/java/com/dfsek/terra/config/prototype/ProtoConfig.java b/common/src/main/java/com/dfsek/terra/config/prototype/ProtoConfig.java index bc1aec46b..329a88113 100644 --- a/common/src/main/java/com/dfsek/terra/config/prototype/ProtoConfig.java +++ b/common/src/main/java/com/dfsek/terra/config/prototype/ProtoConfig.java @@ -8,14 +8,14 @@ public class ProtoConfig implements ConfigTemplate { private String id; @Value("type") - private ConfigType type; + private ConfigType type; public String getId() { return id; } - public ConfigType getType() { + public ConfigType getType() { return type; } } diff --git a/common/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java b/common/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java index 69ee69122..a34a2c8b4 100644 --- a/common/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java +++ b/common/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java @@ -13,7 +13,6 @@ import com.dfsek.terra.api.math.noise.NoiseSampler; import com.dfsek.terra.api.math.noise.samplers.noise.ConstantSampler; import com.dfsek.terra.api.math.paralithic.BlankFunction; import com.dfsek.terra.api.math.paralithic.defined.UserDefinedFunction; -import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockType; import com.dfsek.terra.api.platform.world.Biome; import com.dfsek.terra.api.util.GlueList; @@ -124,7 +123,7 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf @Value("ocean.palette") @Abstractable @Default - private Palette oceanPalette; + private Palette oceanPalette; @Value("elevation.equation") @Default @@ -159,12 +158,12 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf @Value("slabs.palettes") @Abstractable @Default - private Map> slabPalettes; + private Map slabPalettes; @Value("slabs.stair-palettes") @Abstractable @Default - private Map> stairPalettes; + private Map stairPalettes; @Value("slant.threshold") @Abstractable @@ -247,14 +246,6 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf return doSlabs; } - public Map> getSlabPalettes() { - return slabPalettes; - } - - public Map> getStairPalettes() { - return stairPalettes; - } - public BiomeTemplate(ConfigPack pack, TerraPlugin main) { this.pack = pack; biomeNoise = new NoiseSeeded() { @@ -268,7 +259,15 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf return 2; } }; - oceanPalette = new SinglePalette<>(main.getWorldHandle().createBlockData("minecraft:water")); + oceanPalette = new SinglePalette(main.getWorldHandle().createBlockData("minecraft:water")); + } + + public Map getSlabPalettes() { + return slabPalettes; + } + + public Map getStairPalettes() { + return stairPalettes; } public NoiseSeeded getBiomeNoise() { @@ -291,7 +290,7 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf return seaLevel; } - public Palette getOceanPalette() { + public Palette getOceanPalette() { return oceanPalette; } diff --git a/common/src/main/java/com/dfsek/terra/registry/OpenRegistry.java b/common/src/main/java/com/dfsek/terra/registry/OpenRegistry.java index f6b6a3917..3cbe07b0a 100644 --- a/common/src/main/java/com/dfsek/terra/registry/OpenRegistry.java +++ b/common/src/main/java/com/dfsek/terra/registry/OpenRegistry.java @@ -21,6 +21,7 @@ import java.util.stream.Collectors; */ public class OpenRegistry implements Registry { private final Map> objects; + private static final Entry NULL = new Entry<>(null); public OpenRegistry() { objects = new HashMap<>(); @@ -72,9 +73,10 @@ public class OpenRegistry implements Registry { return objects.containsKey(identifier); } + @SuppressWarnings("unchecked") @Override public T get(String identifier) { - return objects.get(identifier).getValue(); + return objects.getOrDefault(identifier, (Entry) NULL).getValue(); } @Override @@ -89,7 +91,7 @@ public class OpenRegistry implements Registry { @Override public Collection entries() { - return objects.values().stream().map(Entry::getRaw).collect(Collectors.toSet()); + return objects.values().stream().map(Entry::getRaw).collect(Collectors.toList()); } @Override diff --git a/common/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java b/common/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java index 6d68e58c9..90dd2a4b4 100644 --- a/common/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java +++ b/common/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java @@ -3,7 +3,11 @@ package com.dfsek.terra.registry.config; import com.dfsek.tectonic.config.ConfigTemplate; import com.dfsek.tectonic.exception.LoadException; import com.dfsek.terra.api.TerraPlugin; -import com.dfsek.terra.api.registry.CheckedRegistry; +import com.dfsek.terra.api.platform.world.Tree; +import com.dfsek.terra.api.world.flora.Flora; +import com.dfsek.terra.api.world.palette.Palette; +import com.dfsek.terra.carving.UserDefinedCarver; +import com.dfsek.terra.config.builder.BiomeBuilder; import com.dfsek.terra.config.factories.BiomeFactory; import com.dfsek.terra.config.factories.CarverFactory; import com.dfsek.terra.config.factories.ConfigFactory; @@ -23,25 +27,36 @@ import com.dfsek.terra.config.templates.PaletteTemplate; import com.dfsek.terra.config.templates.StructureTemplate; import com.dfsek.terra.config.templates.TreeTemplate; import com.dfsek.terra.registry.OpenRegistry; +import com.dfsek.terra.world.population.items.TerraStructure; +import com.dfsek.terra.world.population.items.ores.Ore; import java.util.LinkedHashMap; -import java.util.function.Function; +import java.util.function.BiConsumer; import java.util.function.Supplier; -public class ConfigTypeRegistry extends OpenRegistry> { - public ConfigTypeRegistry(ConfigPack pack, TerraPlugin main) { +public class ConfigTypeRegistry extends OpenRegistry> { + private final BiConsumer> callback; + + public ConfigTypeRegistry(ConfigPack pack, TerraPlugin main, BiConsumer> callback) { super(new LinkedHashMap<>()); // Ordered - add("PALETTE", new ConfigBuilder<>(pack.getPaletteRegistry(), new PaletteFactory(), PaletteTemplate::new)); - add("ORE", new ConfigBuilder<>(pack.getOreRegistry(), new OreFactory(), OreTemplate::new)); - add("FLORA", new ConfigBuilder<>(pack.getFloraRegistry(), new FloraFactory(), FloraTemplate::new)); - add("CARVER", new ConfigBuilder<>(pack.getCarverRegistry(), new CarverFactory(pack), CarverTemplate::new)); - add("STRUCTURE", new ConfigBuilder<>(pack.getStructureRegistry(), new StructureFactory(), StructureTemplate::new)); - add("TREE", new ConfigBuilder<>(pack.getTreeRegistry(), new TreeFactory(), TreeTemplate::new)); - add("BIOME", new ConfigBuilder<>(pack.getBiomeRegistry(), new BiomeFactory(pack), () -> new BiomeTemplate(pack, main))); + this.callback = callback; + add("PALETTE", new ConfigBuilder<>(new PaletteFactory(), PaletteTemplate::new, Palette.class, () -> new PaletteRegistry(main))); + add("ORE", new ConfigBuilder<>(new OreFactory(), OreTemplate::new, Ore.class, OreRegistry::new)); + add("FLORA", new ConfigBuilder<>(new FloraFactory(), FloraTemplate::new, Flora.class, () -> new FloraRegistry(main))); + add("CARVER", new ConfigBuilder<>(new CarverFactory(pack), CarverTemplate::new, UserDefinedCarver.class, CarverRegistry::new)); + add("STRUCTURE", new ConfigBuilder<>(new StructureFactory(), StructureTemplate::new, TerraStructure.class, StructureRegistry::new)); + add("TREE", new ConfigBuilder<>(new TreeFactory(), TreeTemplate::new, Tree.class, TreeRegistry::new)); + add("BIOME", new ConfigBuilder<>(new BiomeFactory(pack), () -> new BiomeTemplate(pack, main), BiomeBuilder.class, BiomeRegistry::new)); add("PACK", new PackBuilder()); } - private static final class PackBuilder implements ConfigType { + @Override + protected boolean add(String identifier, Entry> value) { + callback.accept(identifier, value.getValue()); + return super.add(identifier, value); + } + + private static final class PackBuilder implements ConfigType { @Override public ConfigTemplate getTemplate(ConfigPack pack, TerraPlugin main) { @@ -53,17 +68,29 @@ public class ConfigTypeRegistry extends OpenRegistry> { public void callback(ConfigPack pack, TerraPlugin main, ConfigTemplate loadedConfig) { } + + @Override + public Class getTypeClass() { + return ConfigPack.class; + } + + @Override + public Supplier> registrySupplier() { + return OpenRegistry::new; + } } - private static final class ConfigBuilder implements ConfigType { - private final CheckedRegistry registry; + private static final class ConfigBuilder implements ConfigType { private final ConfigFactory factory; private final Supplier provider; + private final Class clazz; + private final Supplier> registrySupplier; - private ConfigBuilder(CheckedRegistry registry, ConfigFactory factory, Supplier provider) { - this.registry = registry; + private ConfigBuilder(ConfigFactory factory, Supplier provider, Class clazz, Supplier> registrySupplier) { this.factory = factory; this.provider = provider; + this.clazz = clazz; + this.registrySupplier = registrySupplier; } @Override @@ -74,7 +101,17 @@ public class ConfigTypeRegistry extends OpenRegistry> { @SuppressWarnings("deprecation") @Override public void callback(ConfigPack pack, TerraPlugin main, T loadedConfig) throws LoadException { - registry.addUnchecked(loadedConfig.getID(), factory.build(loadedConfig, main)); + pack.getRegistry(clazz).addUnchecked(loadedConfig.getID(), factory.build(loadedConfig, main)); + } + + @Override + public Class getTypeClass() { + return clazz; + } + + @Override + public Supplier> registrySupplier() { + return registrySupplier; } } } diff --git a/common/src/main/java/com/dfsek/terra/registry/config/PaletteRegistry.java b/common/src/main/java/com/dfsek/terra/registry/config/PaletteRegistry.java index e54c8ec81..bcdfea683 100644 --- a/common/src/main/java/com/dfsek/terra/registry/config/PaletteRegistry.java +++ b/common/src/main/java/com/dfsek/terra/registry/config/PaletteRegistry.java @@ -1,22 +1,21 @@ package com.dfsek.terra.registry.config; import com.dfsek.terra.api.TerraPlugin; -import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.world.palette.Palette; import com.dfsek.terra.api.world.palette.SinglePalette; import com.dfsek.terra.registry.OpenRegistry; -public class PaletteRegistry extends OpenRegistry> { +public class PaletteRegistry extends OpenRegistry { private final TerraPlugin main; + public PaletteRegistry(TerraPlugin main) { this.main = main; } - @Override - public Palette get(String identifier) { + public Palette get(String identifier) { if(identifier.startsWith("BLOCK:")) - return new SinglePalette<>(main.getWorldHandle().createBlockData(identifier.substring(6))); // Return single palette for BLOCK: shortcut. + return new SinglePalette(main.getWorldHandle().createBlockData(identifier.substring(6))); // Return single palette for BLOCK: shortcut. return super.get(identifier); } } diff --git a/common/src/main/java/com/dfsek/terra/world/TerraWorld.java b/common/src/main/java/com/dfsek/terra/world/TerraWorld.java index bbf0ac9f3..02b0c848a 100644 --- a/common/src/main/java/com/dfsek/terra/world/TerraWorld.java +++ b/common/src/main/java/com/dfsek/terra/world/TerraWorld.java @@ -75,7 +75,7 @@ public class TerraWorld { */ public BlockData getUngeneratedBlock(int x, int y, int z) { UserDefinedBiome biome = (UserDefinedBiome) provider.getBiome(x, z); - Palette palette = biome.getGenerator(world).getPalette(y); + Palette palette = biome.getGenerator(world).getPalette(y); Sampler sampler = config.getSamplerCache().get(x, z); int fdX = FastMath.floorMod(x, 16); int fdZ = FastMath.floorMod(z, 16); diff --git a/common/src/main/java/com/dfsek/terra/world/generation/WorldGenerator.java b/common/src/main/java/com/dfsek/terra/world/generation/WorldGenerator.java index 971241ca5..2a46d1c2a 100644 --- a/common/src/main/java/com/dfsek/terra/world/generation/WorldGenerator.java +++ b/common/src/main/java/com/dfsek/terra/world/generation/WorldGenerator.java @@ -1,7 +1,6 @@ package com.dfsek.terra.world.generation; import com.dfsek.terra.api.math.noise.NoiseSampler; -import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.world.biome.Generator; import com.dfsek.terra.api.world.palette.Palette; import com.dfsek.terra.api.world.palette.holder.PaletteHolder; @@ -67,7 +66,7 @@ public class WorldGenerator implements Generator { * @return BlockPalette - The biome's palette. */ @Override - public Palette getPalette(int y) { + public Palette getPalette(int y) { return palettes.getPalette(y); } @@ -86,7 +85,7 @@ public class WorldGenerator implements Generator { return blendStep; } - public Palette getSlantPalette(int y) { + public Palette getSlantPalette(int y) { return slantPalettes.getPalette(y); } } diff --git a/common/src/main/java/com/dfsek/terra/world/generation/generators/DefaultChunkGenerator2D.java b/common/src/main/java/com/dfsek/terra/world/generation/generators/DefaultChunkGenerator2D.java index c4f384b07..e0124a4a0 100644 --- a/common/src/main/java/com/dfsek/terra/world/generation/generators/DefaultChunkGenerator2D.java +++ b/common/src/main/java/com/dfsek/terra/world/generation/generators/DefaultChunkGenerator2D.java @@ -112,7 +112,7 @@ public class DefaultChunkGenerator2D implements TerraChunkGenerator { TerraBiome b = grid.getBiome(xOrig + x, zOrig + z); BiomeTemplate c = ((UserDefinedBiome) b).getConfig(); - Palette seaPalette = c.getOceanPalette(); + Palette seaPalette = c.getOceanPalette(); int height = FastMath.min((int) sampler.sample(x, 0, z), world.getMaxHeight() - 1); diff --git a/common/src/main/java/com/dfsek/terra/world/generation/generators/DefaultChunkGenerator3D.java b/common/src/main/java/com/dfsek/terra/world/generation/generators/DefaultChunkGenerator3D.java index f63676161..69e6c8675 100644 --- a/common/src/main/java/com/dfsek/terra/world/generation/generators/DefaultChunkGenerator3D.java +++ b/common/src/main/java/com/dfsek/terra/world/generation/generators/DefaultChunkGenerator3D.java @@ -45,7 +45,7 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator { private final ConfigPack configPack; private final TerraPlugin main; private final BlockType water; - private final SinglePalette blank; + private final SinglePalette blank; private final List blockPopulators = new ArrayList<>(); private final Carver carver; @@ -63,7 +63,7 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator { carver = new NoiseCarver(new Range(0, 255), main.getWorldHandle().createBlockData("minecraft:air"), main); water = main.getWorldHandle().createBlockData("minecraft:water").getBlockType(); - blank = new SinglePalette<>(main.getWorldHandle().createBlockData("minecraft:air")); + blank = new SinglePalette(main.getWorldHandle().createBlockData("minecraft:air")); } @Override @@ -124,7 +124,7 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator { BiomeTemplate c = ((UserDefinedBiome) b).getConfig(); int sea = c.getSeaLevel(); - Palette seaPalette = c.getOceanPalette(); + Palette seaPalette = c.getOceanPalette(); boolean justSet = false; BlockData data = null; @@ -162,11 +162,11 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator { } } - private void prepareBlockPartFloor(BlockData down, BlockData orig, ChunkData chunk, Vector3 block, Map> slabs, - Map> stairs, double thresh, Sampler sampler) { + private void prepareBlockPartFloor(BlockData down, BlockData orig, ChunkData chunk, Vector3 block, Map slabs, + Map stairs, double thresh, Sampler sampler) { if(sampler.sample(block.getX(), block.getY() - 0.4, block.getZ()) > thresh) { if(stairs != null) { - Palette stairPalette = stairs.get(down.getBlockType()); + Palette stairPalette = stairs.get(down.getBlockType()); if(stairPalette != null) { BlockData stair = stairPalette.get(0, block.getX(), block.getY(), block.getZ()).clone(); if(stair instanceof Stairs) { @@ -183,11 +183,11 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator { } } - private void prepareBlockPartCeiling(BlockData up, BlockData orig, ChunkData chunk, Vector3 block, Map> slabs, - Map> stairs, double thresh, Sampler sampler) { + private void prepareBlockPartCeiling(BlockData up, BlockData orig, ChunkData chunk, Vector3 block, Map slabs, + Map stairs, double thresh, Sampler sampler) { if(sampler.sample(block.getX(), block.getY() + 0.4, block.getZ()) > thresh) { if(stairs != null) { - Palette stairPalette = stairs.get(up.getBlockType()); + Palette stairPalette = stairs.get(up.getBlockType()); if(stairPalette != null) { BlockData stair = stairPalette.get(0, block.getX(), block.getY(), block.getZ()).clone(); if(stair instanceof Stairs) { diff --git a/common/src/main/java/com/dfsek/terra/world/population/items/flora/TerraFlora.java b/common/src/main/java/com/dfsek/terra/world/population/items/flora/TerraFlora.java index 0893d1c92..b154c2e91 100644 --- a/common/src/main/java/com/dfsek/terra/world/population/items/flora/TerraFlora.java +++ b/common/src/main/java/com/dfsek/terra/world/population/items/flora/TerraFlora.java @@ -22,7 +22,7 @@ import java.util.ArrayList; import java.util.List; public class TerraFlora implements Flora { - private final Palette floraPalette; + private final Palette floraPalette; private final boolean physics; private final boolean ceiling; @@ -43,7 +43,7 @@ public class TerraFlora implements Flora { private final TerraPlugin main; - public TerraFlora(Palette floraPalette, boolean physics, boolean ceiling, MaterialSet irrigable, MaterialSet spawnable, MaterialSet replaceable, MaterialSet testRotation, int maxPlacements, Search search, boolean spawnBlacklist, int irrigableOffset, TerraPlugin main) { + public TerraFlora(Palette floraPalette, boolean physics, boolean ceiling, MaterialSet irrigable, MaterialSet spawnable, MaterialSet replaceable, MaterialSet testRotation, int maxPlacements, Search search, boolean spawnBlacklist, int irrigableOffset, TerraPlugin main) { this.floraPalette = floraPalette; this.physics = physics; this.testRotation = testRotation; diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/handles/BukkitWorldHandle.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/handles/BukkitWorldHandle.java index 8f3736103..62747e2e2 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/handles/BukkitWorldHandle.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/handles/BukkitWorldHandle.java @@ -28,6 +28,6 @@ public class BukkitWorldHandle implements WorldHandle { @Override public Pair getSelectedLocation(Player player) { org.bukkit.Location[] locations = WorldEditUtil.getSelectionLocations(BukkitAdapter.adapt(player)); - return new Pair<>(BukkitAdapter.adapt(locations[0]), BukkitAdapter.adapt(locations[1])); + return Pair.of(BukkitAdapter.adapt(locations[0]), BukkitAdapter.adapt(locations[1])); } } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/TerraListener.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/TerraListener.java index 4eb05f91e..f1a205e79 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/TerraListener.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/TerraListener.java @@ -5,6 +5,7 @@ import com.dfsek.terra.api.event.EventListener; import com.dfsek.terra.api.event.annotations.Global; import com.dfsek.terra.api.event.annotations.Priority; import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent; +import com.dfsek.terra.api.platform.world.Tree; import com.dfsek.terra.bukkit.world.BukkitAdapter; import com.dfsek.terra.bukkit.world.BukkitTree; import com.dfsek.terra.registry.exception.DuplicateEntryException; @@ -23,8 +24,8 @@ public class TerraListener implements EventListener { for(TreeType value : TreeType.values()) { try { String id = BukkitAdapter.TREE_TRANSFORMER.translate(value); - event.getPack().getTreeRegistry().add(id, new BukkitTree(value, main)); - event.getPack().getTreeRegistry().get(id); // Platform trees should never be marked "dead" + event.getPack().getRegistry(Tree.class).add(id, new BukkitTree(value, main)); + event.getPack().getRegistry(Tree.class).get(id); // Platform trees should never be marked "dead" } catch(DuplicateEntryException ignore) { // If another addon has already registered trees, do nothing. } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index 57a326726..95b8f1fb5 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -311,7 +311,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { RegistryKey> floraKey = RegistryKey.of(Registry.CONFIGURED_FEATURE_WORLDGEN, new Identifier("terra", "flora_populator")); Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, floraKey.getValue(), POPULATOR_CONFIGURED_FEATURE); - registry.forEach(pack -> pack.getBiomeRegistry().forEach((id, biome) -> Registry.register(BuiltinRegistries.BIOME, new Identifier("terra", createBiomeID(pack, id)), createBiome(biome)))); // Register all Terra biomes. + registry.forEach(pack -> pack.getRegistry(BiomeBuilder.class).forEach((id, biome) -> Registry.register(BuiltinRegistries.BIOME, new Identifier("terra", createBiomeID(pack, id)), createBiome(biome)))); // Register all Terra biomes. Registry.register(Registry.CHUNK_GENERATOR, new Identifier("terra:terra"), FabricChunkGeneratorWrapper.CODEC); Registry.register(Registry.BIOME_SOURCE, new Identifier("terra:terra"), TerraBiomeSource.CODEC); @@ -408,7 +408,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { @Priority(Priority.LOWEST) @Global public void injectTrees(ConfigPackPreLoadEvent event) { - CheckedRegistry treeRegistry = event.getPack().getTreeRegistry(); + CheckedRegistry treeRegistry = event.getPack().getRegistry(Tree.class); injectTree(treeRegistry, "BROWN_MUSHROOM", ConfiguredFeatures.HUGE_BROWN_MUSHROOM); injectTree(treeRegistry, "RED_MUSHROOM", ConfiguredFeatures.HUGE_RED_MUSHROOM); injectTree(treeRegistry, "JUNGLE", ConfiguredFeatures.MEGA_JUNGLE_TREE);