implementation pass 1

This commit is contained in:
dfsek
2021-06-23 13:33:59 -07:00
parent 9631b1b578
commit 89657e362a
35 changed files with 121 additions and 61 deletions

View File

@@ -1,10 +1,13 @@
package com.dfsek.terra.api.config;
import com.dfsek.terra.api.LoaderRegistrar;
import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.world.TerraWorld;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import java.util.Set;
public interface ConfigPack extends LoaderRegistrar {
@SuppressWarnings("unchecked")
<T> CheckedRegistry<T> getRegistry(Class<T> clazz);
@@ -14,4 +17,12 @@ public interface ConfigPack extends LoaderRegistrar {
WorldConfig toWorldConfig(TerraWorld world);
CheckedRegistry<ConfigType<?, ?>> getConfigTypeRegistry();
Set<TerraAddon> addons();
String getID();
String getAuthor();
String getVersion();
}

View File

@@ -36,8 +36,7 @@ public class EventManagerImpl implements EventManager {
PackEvent packEvent = (PackEvent) event;
if(packEvent
.getPack()
.getTemplate()
.getAddons()
.addons()
.contains(listenerHolder.addon)) {
listenerHolder.method.invoke(listenerHolder.listener, event);
}

View File

@@ -49,7 +49,7 @@ import java.util.concurrent.ExecutionException;
public class StructureScript implements Structure {
private final Block block;
private final String id;
private final Cache<LocationImpl, StructureBuffer> cache;
private final Cache<Location, StructureBuffer> cache;
private final TerraPlugin main;
private String tempID;

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.api.structures.script.functions;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.api.world.generator.SamplerCache;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.vector.Vector2;
@@ -47,12 +48,12 @@ public class CheckFunction implements Function<String> {
RotationUtil.rotateVector(xz, arguments.getRotation());
LocationImpl location = arguments.getBuffer().getOrigin().clone().add(new Vector3Impl(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).doubleValue(), FastMath.roundToInt(xz.getZ())));
Location location = arguments.getBuffer().getOrigin().clone().add(new Vector3Impl(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).doubleValue(), FastMath.roundToInt(xz.getZ())));
return apply(location, arguments.getBuffer().getOrigin().getWorld());
}
private String apply(LocationImpl vector, World world) {
private String apply(Location vector, World world) {
TerraWorld tw = main.getWorld(world);
SamplerCache cache = tw.getConfig().getSamplerCache();
double comp = sample(vector.getBlockX(), vector.getBlockY(), vector.getBlockZ(), cache);

View File

@@ -47,7 +47,7 @@ public class LootFunction implements Function<Void> {
RotationUtil.rotateVector(xz, arguments.getRotation());
String id = data.apply(implementationArguments, variableMap);
LootTableImpl table = registry.get(id);
LootTable table = registry.get(id);
if(table == null) {
main.logger().severe("No such loot table " + id);

View File

@@ -1,5 +1,6 @@
package com.dfsek.terra.api.structures.structure.buffer;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.structure.buffer.BufferedItem;
import com.dfsek.terra.api.util.GlueList;
@@ -12,7 +13,7 @@ public class Cell implements BufferedItem {
@Override
public void paste(LocationImpl origin) {
public void paste(Location origin) {
items.forEach(item -> item.paste(origin));
}

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.api.structures.structure.buffer;
import com.dfsek.terra.api.structure.buffer.Buffer;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.structure.buffer.BufferedItem;
@@ -15,22 +16,22 @@ public class IntermediateBuffer implements Buffer {
}
@Override
public Buffer addItem(BufferedItem item, LocationImpl location) {
public Buffer addItem(BufferedItem item, Location location) {
return original.addItem(item, location.add(offset));
}
@Override
public LocationImpl getOrigin() {
public Location getOrigin() {
return original.getOrigin().clone().add(offset);
}
@Override
public String getMark(LocationImpl location) {
public String getMark(Location location) {
return original.getMark(location.add(offset));
}
@Override
public Buffer setMark(String mark, LocationImpl location) {
public Buffer setMark(String mark, Location location) {
original.setMark(mark, location.add(offset));
return this;
}

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.api.structures.structure.buffer;
import com.dfsek.terra.api.structure.buffer.Buffer;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.structure.buffer.BufferedItem;
@@ -10,11 +11,11 @@ import java.util.LinkedHashMap;
import java.util.Map;
public class StructureBuffer implements Buffer {
private final Map<LocationImpl, Cell> bufferedItemMap = new LinkedHashMap<>();
private final LocationImpl origin;
private final Map<Location, Cell> bufferedItemMap = new LinkedHashMap<>();
private final Location origin;
private boolean succeeded;
public StructureBuffer(LocationImpl origin) {
public StructureBuffer(Location origin) {
this.origin = origin;
}
@@ -24,7 +25,7 @@ public class StructureBuffer implements Buffer {
public void paste(Chunk chunk) {
bufferedItemMap.forEach(((location, item) -> {
LocationImpl current = origin.clone().add(location);
Location current = origin.clone().add(location);
if(FastMath.floorDiv(current.getBlockX(), 16) != chunk.getX() || FastMath.floorDiv(current.getBlockZ(), 16) != chunk.getZ())
return;
item.paste(chunk, current);
@@ -32,13 +33,13 @@ public class StructureBuffer implements Buffer {
}
@Override
public Buffer addItem(BufferedItem item, LocationImpl location) {
public Buffer addItem(BufferedItem item, Location location) {
bufferedItemMap.computeIfAbsent(location, l -> new Cell()).add(item);
return this;
}
@Override
public String getMark(LocationImpl location) {
public String getMark(Location location) {
Cell cell = bufferedItemMap.get(location);
if(cell != null) {
return cell.getMark();
@@ -47,7 +48,7 @@ public class StructureBuffer implements Buffer {
}
@Override
public Buffer setMark(String mark, LocationImpl location) {
public Buffer setMark(String mark, Location location) {
bufferedItemMap.computeIfAbsent(location, l -> new Cell()).setMark(mark);
return this;
}
@@ -61,7 +62,7 @@ public class StructureBuffer implements Buffer {
}
@Override
public LocationImpl getOrigin() {
public Location getOrigin() {
return origin.clone();
}
}

View File

@@ -2,6 +2,7 @@ package com.dfsek.terra.api.structures.structure.buffer.items;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.structure.buffer.BufferedItem;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.block.Block;
import com.dfsek.terra.api.block.BlockData;
@@ -21,7 +22,7 @@ public class BufferedBlock implements BufferedItem {
}
@Override
public void paste(LocationImpl origin) {
public void paste(Location origin) {
Block block = origin.getBlock();
try {
if(overwrite || block.isEmpty()) {

View File

@@ -3,6 +3,7 @@ package com.dfsek.terra.api.structures.structure.buffer.items;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.event.events.world.generation.EntitySpawnEvent;
import com.dfsek.terra.api.structure.buffer.BufferedItem;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.entity.Entity;
import com.dfsek.terra.api.entity.EntityType;
@@ -18,7 +19,7 @@ public class BufferedEntity implements BufferedItem {
}
@Override
public void paste(LocationImpl origin) {
public void paste(Location origin) {
Entity entity = origin.clone().add(0.5, 0, 0.5).getWorld().spawnEntity(origin, type);
main.getEventManager().callEvent(new EntitySpawnEvent(entity.getWorld().getTerraGenerator().getConfigPack(), entity, entity.getLocation()));
}

View File

@@ -2,7 +2,9 @@ package com.dfsek.terra.api.structures.structure.buffer.items;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.event.events.world.generation.LootPopulateEvent;
import com.dfsek.terra.api.structure.LootTable;
import com.dfsek.terra.api.structure.buffer.BufferedItem;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.block.Block;
import com.dfsek.terra.api.block.state.BlockState;
@@ -12,18 +14,18 @@ import com.dfsek.terra.api.structures.script.StructureScript;
import com.dfsek.terra.api.util.FastRandom;
public class BufferedLootApplication implements BufferedItem {
private final LootTableImpl table;
private final LootTable table;
private final TerraPlugin main;
private final StructureScript structure;
public BufferedLootApplication(LootTableImpl table, TerraPlugin main, StructureScript structure) {
public BufferedLootApplication(LootTable table, TerraPlugin main, StructureScript structure) {
this.table = table;
this.main = main;
this.structure = structure;
}
@Override
public void paste(LocationImpl origin) {
public void paste(Location origin) {
try {
Block block = origin.getBlock();
BlockState data = block.getState();

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.api.structures.structure.buffer.items;
import com.dfsek.terra.api.structure.buffer.BufferedItem;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.block.Block;
import com.dfsek.terra.api.block.BlockData;
@@ -14,7 +15,7 @@ public class BufferedPulledBlock implements BufferedItem {
}
@Override
public void paste(LocationImpl origin) {
public void paste(Location origin) {
Block pos = origin.getBlock();
while(pos.getY() > origin.getWorld().getMinHeight()) {
if(!pos.isEmpty()) {

View File

@@ -2,6 +2,7 @@ package com.dfsek.terra.api.structures.structure.buffer.items;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.structure.buffer.BufferedItem;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.block.state.BlockState;
@@ -15,7 +16,7 @@ public class BufferedStateManipulator implements BufferedItem {
}
@Override
public void paste(LocationImpl origin) {
public void paste(Location origin) {
try {
BlockState state = origin.getBlock().getState();
state.applyState(data);

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.api.world.biome.pipeline.mutator;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.collections.ProbabilityCollectionImpl;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator;
@@ -10,11 +11,11 @@ import java.util.Map;
public class BorderListMutator implements BiomeMutator {
private final String border;
private final NoiseSampler noiseSampler;
private final ProbabilityCollectionImpl<TerraBiome> replaceDefault;
private final ProbabilityCollection<TerraBiome> replaceDefault;
private final String defaultReplace;
private final Map<TerraBiome, ProbabilityCollectionImpl<TerraBiome>> replace;
private final Map<TerraBiome, ProbabilityCollection<TerraBiome>> replace;
public BorderListMutator(Map<TerraBiome, ProbabilityCollectionImpl<TerraBiome>> replace, String border, String defaultReplace, NoiseSampler noiseSampler, ProbabilityCollectionImpl<TerraBiome> replaceDefault) {
public BorderListMutator(Map<TerraBiome, ProbabilityCollection<TerraBiome>> replace, String border, String defaultReplace, NoiseSampler noiseSampler, ProbabilityCollection<TerraBiome> replaceDefault) {
this.border = border;
this.noiseSampler = noiseSampler;
this.replaceDefault = replaceDefault;

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.api.world.biome.pipeline.mutator;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.collections.ProbabilityCollectionImpl;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator;
@@ -8,10 +9,10 @@ import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator;
public class BorderMutator implements BiomeMutator {
private final String border;
private final NoiseSampler noiseSampler;
private final ProbabilityCollectionImpl<TerraBiome> replace;
private final ProbabilityCollection<TerraBiome> replace;
private final String replaceTag;
public BorderMutator(String border, String replaceTag, NoiseSampler noiseSampler, ProbabilityCollectionImpl<TerraBiome> replace) {
public BorderMutator(String border, String replaceTag, NoiseSampler noiseSampler, ProbabilityCollection<TerraBiome> replace) {
this.border = border;
this.noiseSampler = noiseSampler;
this.replace = replace;

View File

@@ -1,16 +1,17 @@
package com.dfsek.terra.api.world.biome.pipeline.mutator;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.collections.ProbabilityCollectionImpl;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator;
public class ReplaceMutator implements BiomeMutator {
private final String replaceableTag;
private final ProbabilityCollectionImpl<TerraBiome> replace;
private final ProbabilityCollection<TerraBiome> replace;
private final NoiseSampler sampler;
public ReplaceMutator(String replaceable, ProbabilityCollectionImpl<TerraBiome> replace, NoiseSampler sampler) {
public ReplaceMutator(String replaceable, ProbabilityCollection<TerraBiome> replace, NoiseSampler sampler) {
this.replaceableTag = replaceable;
this.replace = replace;
this.sampler = sampler;

View File

@@ -1,15 +1,16 @@
package com.dfsek.terra.api.world.biome.pipeline.source;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.collections.ProbabilityCollectionImpl;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeSource;
public class RandomSource implements BiomeSource {
private final ProbabilityCollectionImpl<TerraBiome> biomes;
private final ProbabilityCollection<TerraBiome> biomes;
private final NoiseSampler sampler;
public RandomSource(ProbabilityCollectionImpl<TerraBiome> biomes, NoiseSampler sampler) {
public RandomSource(ProbabilityCollection<TerraBiome> biomes, NoiseSampler sampler) {
this.biomes = biomes;
this.sampler = sampler;
}

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.api.world.locate;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.biome.TerraBiome;
@@ -14,7 +15,7 @@ import java.util.function.Consumer;
*/
public class AsyncBiomeFinder extends AsyncFeatureFinder<TerraBiome> {
public AsyncBiomeFinder(BiomeProvider provider, TerraBiome target, @NotNull LocationImpl origin, int startRadius, int maxRadius, Consumer<Vector3> callback, TerraPlugin main) {
public AsyncBiomeFinder(BiomeProvider provider, TerraBiome target, @NotNull Location origin, int startRadius, int maxRadius, Consumer<Vector3> callback, TerraPlugin main) {
super(provider, target, origin, startRadius, maxRadius, callback, main);
}

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.api.world.locate;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.vector.Vector3Impl;
@@ -22,7 +23,7 @@ public abstract class AsyncFeatureFinder<T> implements Runnable {
protected int searchSize = 1;
protected final TerraPlugin main;
public AsyncFeatureFinder(BiomeProvider provider, T target, @NotNull LocationImpl origin, int startRadius, int maxRadius, Consumer<Vector3> callback, TerraPlugin main) {
public AsyncFeatureFinder(BiomeProvider provider, T target, @NotNull Location origin, int startRadius, int maxRadius, Consumer<Vector3> callback, TerraPlugin main) {
this.provider = provider;
this.target = target;
this.main = main;

View File

@@ -2,6 +2,7 @@ package com.dfsek.terra.api.world.locate;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.util.PopulationUtil;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.structure.rotation.Rotation;
@@ -16,7 +17,7 @@ import java.util.Random;
import java.util.function.Consumer;
public class AsyncStructureFinder extends AsyncFeatureFinder<TerraStructure> {
public AsyncStructureFinder(BiomeProvider provider, TerraStructure target, @NotNull LocationImpl origin, int startRadius, int maxRadius, Consumer<Vector3> callback, TerraPlugin main) {
public AsyncStructureFinder(BiomeProvider provider, TerraStructure target, @NotNull Location origin, int startRadius, int maxRadius, Consumer<Vector3> callback, TerraPlugin main) {
super(provider, target, origin, startRadius, maxRadius, callback, main);
setSearchSize(target.getSpawn().getWidth() + 2 * target.getSpawn().getSeparation());
}
@@ -28,7 +29,7 @@ public class AsyncStructureFinder extends AsyncFeatureFinder<TerraStructure> {
@Override
public boolean isValid(int x, int z, TerraStructure target) {
LocationImpl spawn = target.getSpawn().getChunkSpawn(x, z, world.getSeed()).toLocation(world);
Location spawn = target.getSpawn().getChunkSpawn(x, z, world.getSeed()).toLocation(world);
if(!((UserDefinedBiome) provider.getBiome(spawn)).getConfig().getStructures().contains(target)) return false;
Random random = new FastRandom(PopulationUtil.getCarverChunkSeed(FastMath.floorDiv(spawn.getBlockX(), 16), FastMath.floorDiv(spawn.getBlockZ(), 16), world.getSeed()));
return target.getStructure().get(random).test(spawn.setY(target.getSpawnStart().get(random)), random, Rotation.fromDegrees(90 * random.nextInt(4)));

View File

@@ -28,8 +28,7 @@ public class PacksCommand implements CommandTemplate {
LangUtil.send("command.packs.main", sender);
registry.entries().forEach(entry -> {
ConfigPackTemplate template = entry.getTemplate();
LangUtil.send("command.packs.pack", sender, template.getID(), template.getAuthor(), template.getVersion());
LangUtil.send("command.packs.pack", sender, entry.getID(), entry.getAuthor(), entry.getVersion());
});
}
}

View File

@@ -7,6 +7,7 @@ import com.dfsek.terra.api.command.annotation.type.DebugCommand;
import com.dfsek.terra.api.command.annotation.type.PlayerCommand;
import com.dfsek.terra.api.command.annotation.type.WorldCommand;
import com.dfsek.terra.api.injection.annotations.Inject;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.entity.CommandSender;
import com.dfsek.terra.api.entity.Player;
@@ -33,7 +34,7 @@ public class SpawnCommand implements CommandTemplate {
@Override
public void execute(CommandSender sender) {
Player player = (Player) sender;
LocationImpl p = player.getLocation();
Location p = player.getLocation();
int x = p.getBlockX();
int y = p.getBlockY();
int z = p.getBlockZ();

View File

@@ -9,6 +9,7 @@ import com.dfsek.terra.api.command.annotation.type.DebugCommand;
import com.dfsek.terra.api.command.annotation.type.PlayerCommand;
import com.dfsek.terra.api.command.annotation.type.WorldCommand;
import com.dfsek.terra.api.injection.annotations.Inject;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.entity.CommandSender;
import com.dfsek.terra.api.block.Block;
@@ -45,10 +46,10 @@ public class StructureExportCommand implements CommandTemplate {
public void execute(CommandSender sender) {
Player player = (Player) sender;
Pair<LocationImpl, LocationImpl> l = main.getWorldHandle().getSelectedLocation(player);
Pair<Location, Location> l = main.getWorldHandle().getSelectedLocation(player);
LocationImpl l1 = l.getLeft();
LocationImpl l2 = l.getRight();
Location l1 = l.getLeft();
Location l2 = l.getRight();
StringBuilder scriptBuilder = new StringBuilder("id \"" + id + "\";\nnum y = 0;\n");

View File

@@ -1,5 +1,6 @@
package com.dfsek.terra.config.dummy;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.block.Block;
import com.dfsek.terra.api.entity.Entity;
@@ -41,7 +42,7 @@ public class DummyWorld implements World {
}
@Override
public Entity spawnEntity(LocationImpl location, EntityType entityType) {
public Entity spawnEntity(Location location, EntityType entityType) {
throw new UnsupportedOperationException("Cannot spawn entity in DummyWorld");
}

View File

@@ -21,7 +21,7 @@ public final class LangUtil {
try(JarFile jar = main.getModJar()) {
copyResourcesToDirectory(jar, "lang", file.toString());
} catch(IOException | URISyntaxException e) {
main.getDebugLogger().error("Failed to dump language files!");
main.getDebugLogger().severe("Failed to dump language files!");
main.getDebugLogger().stack(e);
}
try {

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.config.loaders.config.biome.templates.source;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.collections.ProbabilityCollectionImpl;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeSource;
@@ -12,7 +13,7 @@ public class NoiseSourceTemplate extends SourceTemplate {
private NoiseSeeded noise;
@Value("biomes")
private ProbabilityCollectionImpl<BiomeBuilder> biomes;
private ProbabilityCollection<BiomeBuilder> biomes;
@Override
public BiomeSource apply(Long seed) {

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.collections.ProbabilityCollectionImpl;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator;
@@ -19,15 +20,15 @@ public class BorderListMutatorTemplate extends MutatorStageTemplate {
private String defaultReplace;
@Value("default-to")
private ProbabilityCollectionImpl<BiomeBuilder> defaultTo;
private ProbabilityCollection<BiomeBuilder> defaultTo;
@Value("replace")
private Map<BiomeBuilder, ProbabilityCollectionImpl<BiomeBuilder>> replace;
private Map<BiomeBuilder, ProbabilityCollection<BiomeBuilder>> replace;
@Override
public BiomeMutator build(long seed) {
Map<TerraBiome, ProbabilityCollectionImpl<TerraBiome>> replaceMap = new HashMap<>();
Map<TerraBiome, ProbabilityCollection<TerraBiome>> replaceMap = new HashMap<>();
replace.forEach((keyBuilder, replacements) -> replaceMap.put(keyBuilder.apply(seed), replacements.map(replacement -> replacement.apply(seed), true)));

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.collections.ProbabilityCollectionImpl;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator;
import com.dfsek.terra.api.world.biome.pipeline.mutator.BorderMutator;
@@ -15,7 +16,7 @@ public class BorderMutatorTemplate extends MutatorStageTemplate {
private String replace;
@Value("to")
private ProbabilityCollectionImpl<BiomeBuilder> to;
private ProbabilityCollection<BiomeBuilder> to;
@Override
public BiomeMutator build(long seed) {

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.collections.ProbabilityCollectionImpl;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator;
import com.dfsek.terra.api.world.biome.pipeline.mutator.ReplaceMutator;
@@ -12,7 +13,7 @@ public class ReplaceMutatorTemplate extends MutatorStageTemplate {
private String from;
@Value("to")
private ProbabilityCollectionImpl<BiomeBuilder> to;
private ProbabilityCollection<BiomeBuilder> to;
@Override
public BiomeMutator build(long seed) {

View File

@@ -9,6 +9,7 @@ import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.event.events.config.ConfigPackPostLoadEvent;
import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
@@ -317,4 +318,24 @@ public class ConfigPackImpl implements ConfigPack {
}
};
}
@Override
public Set<TerraAddon> addons() {
return template.getAddons();
}
@Override
public String getID() {
return template.getID();
}
@Override
public String getAuthor() {
return template.getAuthor();
}
@Override
public String getVersion() {
return template.getVersion();
}
}

View File

@@ -28,7 +28,7 @@ public class OrePopulator implements TerraBlockPopulator {
public void populate(@NotNull World world, @NotNull Chunk chunk) {
TerraWorld tw = main.getWorld(world);
try(ProfileFrame ignore = main.getProfiler().profile("ore")) {
if(tw.getConfig().getTemplate().disableOres()) return;
if(tw.getConfig().disableOres()) return;
if(!tw.isSafe()) return;
for(int cx = -1; cx <= 1; cx++) {

View File

@@ -1,7 +1,10 @@
package com.dfsek.terra.world.population;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.config.WorldConfig;
import com.dfsek.terra.api.structure.Structure;
import com.dfsek.terra.api.util.PopulationUtil;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.world.TerraWorld;
@@ -32,15 +35,15 @@ public class StructurePopulator implements TerraBlockPopulator, Chunkified {
public void populate(@NotNull World world, @NotNull Chunk chunk) {
TerraWorld tw = main.getWorld(world);
try(ProfileFrame ignore = main.getProfiler().profile("structure")) {
if(tw.getConfig().getTemplate().disableStructures()) return;
if(tw.getConfig().disableStructures()) return;
int cx = (chunk.getX() << 4);
int cz = (chunk.getZ() << 4);
if(!tw.isSafe()) return;
BiomeProvider provider = tw.getBiomeProvider();
WorldConfigImpl config = tw.getConfig();
for(TerraStructure conf : config.getStructures()) {
LocationImpl spawn = conf.getSpawn().getNearestSpawn(cx + 8, cz + 8, world.getSeed()).toLocation(world);
WorldConfig config = tw.getConfig();
for(TerraStructure conf : config.getRegistry(TerraStructure.class).entries()) {
Location spawn = conf.getSpawn().getNearestSpawn(cx + 8, cz + 8, world.getSeed()).toLocation(world);
if(!((UserDefinedBiome) provider.getBiome(spawn)).getConfig().getStructures().contains(conf))
continue;

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.world.population.items.flora;
import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.block.Block;
import com.dfsek.terra.api.block.BlockData;
@@ -37,7 +38,7 @@ public class BlockFlora implements Flora {
}
@Override
public boolean plant(LocationImpl location) {
public boolean plant(Location location) {
location.add(0, 1, 0).getBlock().setBlockData(data, true);
return true;
}

View File

@@ -2,6 +2,7 @@ package com.dfsek.terra.world.population.items.flora;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.block.Block;
import com.dfsek.terra.api.block.BlockData;
@@ -92,7 +93,7 @@ public class TerraFlora implements Flora {
@Override
public boolean plant(LocationImpl location) {
public boolean plant(Location location) {
boolean doRotation = testRotation.size() > 0;
int size = floraPalette.getSize();
int c = ceiling ? -1 : 1;

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.world.population.items.tree;
import com.dfsek.terra.api.structure.Structure;
import com.dfsek.terra.api.vector.Location;
import com.dfsek.terra.vector.LocationImpl;
import com.dfsek.terra.api.world.Tree;
import com.dfsek.terra.api.structure.rotation.Rotation;
@@ -21,7 +22,7 @@ public class TerraTree implements Tree {
}
@Override
public synchronized boolean plant(LocationImpl location, Random random) {
public synchronized boolean plant(Location location, Random random) {
return structure.get(random).generateDirect(location.clone().add(0, yOffset, 0), random, Rotation.fromDegrees(90 * random.nextInt(4)));
}