mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-18 14:50:56 +00:00
correct some errors in carver and structure addons
This commit is contained in:
@@ -1,8 +1,7 @@
|
|||||||
package com.dfsek.terra.addons.carver;
|
package com.dfsek.terra.addons.carver;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.carver.carving.Worm;
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.util.FastRandom;
|
|
||||||
import com.dfsek.terra.api.util.GlueList;
|
|
||||||
import com.dfsek.terra.api.util.MathUtil;
|
import com.dfsek.terra.api.util.MathUtil;
|
||||||
import com.dfsek.terra.api.util.PopulationUtil;
|
import com.dfsek.terra.api.util.PopulationUtil;
|
||||||
import com.dfsek.terra.api.vector.Vector3;
|
import com.dfsek.terra.api.vector.Vector3;
|
||||||
@@ -10,12 +9,12 @@ import com.dfsek.terra.api.world.World;
|
|||||||
import com.dfsek.terra.api.world.biome.TerraBiome;
|
import com.dfsek.terra.api.world.biome.TerraBiome;
|
||||||
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
|
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
|
||||||
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
||||||
import com.dfsek.terra.api.world.carving.Worm;
|
|
||||||
import com.google.common.cache.CacheBuilder;
|
import com.google.common.cache.CacheBuilder;
|
||||||
import com.google.common.cache.CacheLoader;
|
import com.google.common.cache.CacheLoader;
|
||||||
import com.google.common.cache.LoadingCache;
|
import com.google.common.cache.LoadingCache;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
@@ -34,11 +33,11 @@ public class CarverCache {
|
|||||||
int chunkX = (int) (key >> 32);
|
int chunkX = (int) (key >> 32);
|
||||||
int chunkZ = (int) key.longValue();
|
int chunkZ = (int) key.longValue();
|
||||||
BiomeProvider provider = main.getWorld(w).getBiomeProvider();
|
BiomeProvider provider = main.getWorld(w).getBiomeProvider();
|
||||||
if(CarverCache.this.carver.isChunkCarved(w, chunkX, chunkZ, new FastRandom(PopulationUtil.getCarverChunkSeed(chunkX, chunkZ, w.getSeed() + CarverCache.this.carver.hashCode())))) {
|
if(CarverCache.this.carver.isChunkCarved(w, chunkX, chunkZ, new Random(PopulationUtil.getCarverChunkSeed(chunkX, chunkZ, w.getSeed() + CarverCache.this.carver.hashCode())))) {
|
||||||
long seed = PopulationUtil.getCarverChunkSeed(chunkX, chunkZ, w.getSeed());
|
long seed = PopulationUtil.getCarverChunkSeed(chunkX, chunkZ, w.getSeed());
|
||||||
Random r = new FastRandom(seed);
|
Random r = new Random(seed);
|
||||||
Worm carving = CarverCache.this.carver.getWorm(seed, new Vector3((chunkX << 4) + r.nextInt(16), CarverCache.this.carver.getConfig().getHeight().get(r), (chunkZ << 4) + r.nextInt(16)));
|
Worm carving = CarverCache.this.carver.getWorm(seed, new Vector3((chunkX << 4) + r.nextInt(16), CarverCache.this.carver.getConfig().getHeight().get(r), (chunkZ << 4) + r.nextInt(16)));
|
||||||
List<Worm.WormPoint> points = new GlueList<>();
|
List<Worm.WormPoint> points = new ArrayList<>();
|
||||||
for(int i = 0; i < carving.getLength(); i++) {
|
for(int i = 0; i < carving.getLength(); i++) {
|
||||||
carving.step();
|
carving.step();
|
||||||
TerraBiome biome = provider.getBiome(carving.getRunning());
|
TerraBiome biome = provider.getBiome(carving.getRunning());
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package com.dfsek.terra.addons.carver;
|
|||||||
|
|
||||||
import com.dfsek.terra.api.block.state.BlockState;
|
import com.dfsek.terra.api.block.state.BlockState;
|
||||||
import com.dfsek.terra.api.block.BlockType;
|
import com.dfsek.terra.api.block.BlockType;
|
||||||
|
import com.dfsek.terra.api.util.collection.MaterialSet;
|
||||||
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
|
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
|
||||||
import com.dfsek.terra.api.util.collections.MaterialSet;
|
|
||||||
import net.jafama.FastMath;
|
import net.jafama.FastMath;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@ import com.dfsek.terra.api.block.BlockType;
|
|||||||
import com.dfsek.terra.api.config.AbstractableTemplate;
|
import com.dfsek.terra.api.config.AbstractableTemplate;
|
||||||
import com.dfsek.terra.api.math.range.ConstantRange;
|
import com.dfsek.terra.api.math.range.ConstantRange;
|
||||||
import com.dfsek.terra.api.util.Range;
|
import com.dfsek.terra.api.util.Range;
|
||||||
import com.dfsek.terra.api.util.collections.MaterialSet;
|
import com.dfsek.terra.api.util.collection.MaterialSet;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ import com.dfsek.terra.api.world.TerraWorld;
|
|||||||
import com.dfsek.terra.api.world.World;
|
import com.dfsek.terra.api.world.World;
|
||||||
import com.dfsek.terra.api.world.generator.Chunkified;
|
import com.dfsek.terra.api.world.generator.Chunkified;
|
||||||
import com.dfsek.terra.api.world.generator.TerraBlockPopulator;
|
import com.dfsek.terra.api.world.generator.TerraBlockPopulator;
|
||||||
import com.dfsek.terra.carving.UserDefinedCarver;
|
|
||||||
import com.dfsek.terra.config.templates.CarverTemplate;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|||||||
+2
-2
@@ -93,7 +93,7 @@ public class UserDefinedCarver extends Carver {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Worm getWorm(long l, Vector3 vector) {
|
public Worm getWorm(long l, Vector3 vector) {
|
||||||
Random r = new FastRandom(l + hash);
|
Random r = new Random(l + hash);
|
||||||
return new UserDefinedWorm(length.get(r) / 2, r, vector, topCut, bottomCut, l);
|
return new UserDefinedWorm(length.get(r) / 2, r, vector, topCut, bottomCut, l);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ public class UserDefinedCarver extends Carver {
|
|||||||
public boolean isChunkCarved(World w, int chunkX, int chunkZ, Random random) {
|
public boolean isChunkCarved(World w, int chunkX, int chunkZ, Random random) {
|
||||||
BiomeTemplate conf = ((UserDefinedBiome) main.getWorld(w).getBiomeProvider().getBiome((chunkX << 4) + 8, (chunkZ << 4) + 8)).getConfig();
|
BiomeTemplate conf = ((UserDefinedBiome) main.getWorld(w).getBiomeProvider().getBiome((chunkX << 4) + 8, (chunkZ << 4) + 8)).getConfig();
|
||||||
if(conf.getCarvers().get(this) != null) {
|
if(conf.getCarvers().get(this) != null) {
|
||||||
return new FastRandom(random.nextLong() + hash).nextInt(100) < conf.getCarvers().get(this);
|
return new Random(random.nextLong() + hash).nextInt(100) < conf.getCarvers().get(this);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -8,6 +8,6 @@ import com.dfsek.terra.config.templates.StructureTemplate;
|
|||||||
public class StructureFactory implements ConfigFactory<StructureTemplate, ConfiguredStructure> {
|
public class StructureFactory implements ConfigFactory<StructureTemplate, ConfiguredStructure> {
|
||||||
@Override
|
@Override
|
||||||
public ConfiguredStructure build(StructureTemplate config, TerraPlugin main) {
|
public ConfiguredStructure build(StructureTemplate config, TerraPlugin main) {
|
||||||
return new TerraStructure(config.getStructures(), config.getY(), config.getSpawn(), config);
|
return new TerraStructure(config.getStructures(), config.getY(), config.getSpawn());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -5,7 +5,6 @@ import com.dfsek.terra.api.config.WorldConfig;
|
|||||||
import com.dfsek.terra.api.profiler.ProfileFrame;
|
import com.dfsek.terra.api.profiler.ProfileFrame;
|
||||||
import com.dfsek.terra.api.structure.ConfiguredStructure;
|
import com.dfsek.terra.api.structure.ConfiguredStructure;
|
||||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
import com.dfsek.terra.api.structure.rotation.Rotation;
|
||||||
import com.dfsek.terra.api.util.FastRandom;
|
|
||||||
import com.dfsek.terra.api.util.PopulationUtil;
|
import com.dfsek.terra.api.util.PopulationUtil;
|
||||||
import com.dfsek.terra.api.vector.Vector3;
|
import com.dfsek.terra.api.vector.Vector3;
|
||||||
import com.dfsek.terra.api.world.Chunk;
|
import com.dfsek.terra.api.world.Chunk;
|
||||||
@@ -44,7 +43,7 @@ public class StructurePopulator implements TerraBlockPopulator, Chunkified {
|
|||||||
|
|
||||||
if(!((UserDefinedBiome) provider.getBiome(spawn)).getConfig().getStructures().contains(conf))
|
if(!((UserDefinedBiome) provider.getBiome(spawn)).getConfig().getStructures().contains(conf))
|
||||||
continue;
|
continue;
|
||||||
Random random = new FastRandom(PopulationUtil.getCarverChunkSeed(FastMath.floorDiv(spawn.getBlockX(), 16), FastMath.floorDiv(spawn.getBlockZ(), 16), world.getSeed()));
|
Random random = new Random(PopulationUtil.getCarverChunkSeed(FastMath.floorDiv(spawn.getBlockX(), 16), FastMath.floorDiv(spawn.getBlockZ(), 16), world.getSeed()));
|
||||||
conf.getStructure().get(random).generate(spawn.setY(conf.getSpawnStart().get(random)), world, chunk, random, Rotation.fromDegrees(90 * random.nextInt(4)));
|
conf.getStructure().get(random).generate(spawn.setY(conf.getSpawnStart().get(random)), world, chunk, random, Rotation.fromDegrees(90 * random.nextInt(4)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-10
@@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.config.templates;
|
package com.dfsek.terra.addons.structure;
|
||||||
|
|
||||||
import com.dfsek.tectonic.annotations.Abstractable;
|
import com.dfsek.tectonic.annotations.Abstractable;
|
||||||
import com.dfsek.tectonic.annotations.Default;
|
import com.dfsek.tectonic.annotations.Default;
|
||||||
@@ -11,6 +11,7 @@ import com.dfsek.terra.api.util.GlueList;
|
|||||||
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
|
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
|
||||||
import com.dfsek.terra.api.util.Range;
|
import com.dfsek.terra.api.util.Range;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@SuppressWarnings({"unused", "FieldMayBeFinal"})
|
@SuppressWarnings({"unused", "FieldMayBeFinal"})
|
||||||
@@ -30,11 +31,6 @@ public class StructureTemplate implements AbstractableTemplate, ConfigTemplate {
|
|||||||
@Abstractable
|
@Abstractable
|
||||||
private StructureSpawn spawn;
|
private StructureSpawn spawn;
|
||||||
|
|
||||||
@Value("features")
|
|
||||||
@Abstractable
|
|
||||||
@Default
|
|
||||||
private List<Void> features = new GlueList<>();
|
|
||||||
|
|
||||||
public String getID() {
|
public String getID() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
@@ -47,10 +43,6 @@ public class StructureTemplate implements AbstractableTemplate, ConfigTemplate {
|
|||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Void> getFeatures() {
|
|
||||||
return features;
|
|
||||||
}
|
|
||||||
|
|
||||||
public StructureSpawn getSpawn() {
|
public StructureSpawn getSpawn() {
|
||||||
return spawn;
|
return spawn;
|
||||||
}
|
}
|
||||||
+1
-8
@@ -5,23 +5,16 @@ import com.dfsek.terra.api.structure.Structure;
|
|||||||
import com.dfsek.terra.api.structure.StructureSpawn;
|
import com.dfsek.terra.api.structure.StructureSpawn;
|
||||||
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
|
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
|
||||||
import com.dfsek.terra.api.util.Range;
|
import com.dfsek.terra.api.util.Range;
|
||||||
import com.dfsek.terra.config.templates.StructureTemplate;
|
|
||||||
|
|
||||||
public class TerraStructure implements ConfiguredStructure {
|
public class TerraStructure implements ConfiguredStructure {
|
||||||
private final ProbabilityCollection<Structure> structure;
|
private final ProbabilityCollection<Structure> structure;
|
||||||
private final Range spawnStart;
|
private final Range spawnStart;
|
||||||
private final StructureSpawn spawn;
|
private final StructureSpawn spawn;
|
||||||
private final StructureTemplate template;
|
|
||||||
|
|
||||||
public TerraStructure(ProbabilityCollection<Structure> structures, Range spawnStart, StructureSpawn spawn, StructureTemplate template) {
|
public TerraStructure(ProbabilityCollection<Structure> structures, Range spawnStart, StructureSpawn spawn) {
|
||||||
this.structure = structures;
|
this.structure = structures;
|
||||||
this.spawnStart = spawnStart;
|
this.spawnStart = spawnStart;
|
||||||
this.spawn = spawn;
|
this.spawn = spawn;
|
||||||
this.template = template;
|
|
||||||
}
|
|
||||||
|
|
||||||
public StructureTemplate getTemplate() {
|
|
||||||
return template;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-2
@@ -3,7 +3,6 @@ package com.dfsek.terra.addons.structure.command;
|
|||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.structure.ConfiguredStructure;
|
import com.dfsek.terra.api.structure.ConfiguredStructure;
|
||||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
import com.dfsek.terra.api.structure.rotation.Rotation;
|
||||||
import com.dfsek.terra.api.util.FastRandom;
|
|
||||||
import com.dfsek.terra.api.util.PopulationUtil;
|
import com.dfsek.terra.api.util.PopulationUtil;
|
||||||
import com.dfsek.terra.api.vector.Vector3;
|
import com.dfsek.terra.api.vector.Vector3;
|
||||||
import com.dfsek.terra.api.world.World;
|
import com.dfsek.terra.api.world.World;
|
||||||
@@ -30,7 +29,7 @@ public class AsyncStructureFinder extends AsyncFeatureFinder<ConfiguredStructure
|
|||||||
public boolean isValid(int x, int z, ConfiguredStructure target) {
|
public boolean isValid(int x, int z, ConfiguredStructure target) {
|
||||||
Vector3 spawn = target.getSpawn().getChunkSpawn(x, z, world.getSeed());
|
Vector3 spawn = target.getSpawn().getChunkSpawn(x, z, world.getSeed());
|
||||||
if(!((UserDefinedBiome) provider.getBiome(spawn)).getConfig().getStructures().contains(target)) return false;
|
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()));
|
Random random = new Random(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)), world, random, Rotation.fromDegrees(90 * random.nextInt(4)));
|
return target.getStructure().get(random).test(spawn.setY(target.getSpawnStart().get(random)), world, random, Rotation.fromDegrees(90 * random.nextInt(4)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-48
@@ -1,48 +0,0 @@
|
|||||||
package com.dfsek.terra.addons.structure.command.structure;
|
|
||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
|
||||||
import com.dfsek.terra.api.command.CommandTemplate;
|
|
||||||
import com.dfsek.terra.api.command.annotation.Command;
|
|
||||||
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.entity.CommandSender;
|
|
||||||
import com.dfsek.terra.api.entity.Player;
|
|
||||||
import com.dfsek.terra.api.injection.annotations.Inject;
|
|
||||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
|
||||||
import com.dfsek.terra.addons.structure.structures.parser.lang.constants.NumericConstant;
|
|
||||||
import com.dfsek.terra.addons.structure.structures.script.TerraImplementationArguments;
|
|
||||||
import com.dfsek.terra.addons.structure.structures.script.functions.CheckFunction;
|
|
||||||
import com.dfsek.terra.addons.structure.structures.structure.buffer.StructureBuffer;
|
|
||||||
import com.dfsek.terra.addons.structure.structures.tokenizer.Position;
|
|
||||||
import com.dfsek.terra.api.util.FastRandom;
|
|
||||||
import com.dfsek.terra.api.vector.Vector3;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
@DebugCommand
|
|
||||||
@PlayerCommand
|
|
||||||
@WorldCommand
|
|
||||||
@Command(
|
|
||||||
usage = "/terra spawn"
|
|
||||||
)
|
|
||||||
public class SpawnCommand implements CommandTemplate {
|
|
||||||
@Inject
|
|
||||||
private TerraPlugin main;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(CommandSender sender) {
|
|
||||||
Player player = (Player) sender;
|
|
||||||
Vector3 p = player.position();
|
|
||||||
int x = p.getBlockX();
|
|
||||||
int y = p.getBlockY();
|
|
||||||
int z = p.getBlockZ();
|
|
||||||
Position dummy = new Position(0, 0);
|
|
||||||
|
|
||||||
String check = new CheckFunction(main, new NumericConstant(0, dummy), new NumericConstant(0, dummy), new NumericConstant(0, dummy), dummy).apply(new TerraImplementationArguments(new StructureBuffer(
|
|
||||||
new Vector3(x, y, z)
|
|
||||||
), Rotation.NONE, new FastRandom(), player.world(), 0), new HashMap<>());
|
|
||||||
|
|
||||||
sender.sendMessage("Found: " + check);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+1
-6
@@ -18,11 +18,6 @@ import com.dfsek.terra.config.lang.LangUtil;
|
|||||||
value = "load",
|
value = "load",
|
||||||
aliases = "ld"
|
aliases = "ld"
|
||||||
),
|
),
|
||||||
@Subcommand(
|
|
||||||
clazz = SpawnCommand.class,
|
|
||||||
value = "spawn",
|
|
||||||
aliases = "s"
|
|
||||||
),
|
|
||||||
@Subcommand(
|
@Subcommand(
|
||||||
clazz = StructureLocateCommand.class,
|
clazz = StructureLocateCommand.class,
|
||||||
value = "locate",
|
value = "locate",
|
||||||
@@ -34,6 +29,6 @@ import com.dfsek.terra.config.lang.LangUtil;
|
|||||||
public class StructureCommand implements CommandTemplate {
|
public class StructureCommand implements CommandTemplate {
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender) {
|
public void execute(CommandSender sender) {
|
||||||
LangUtil.send("command.structure.main-menu", sender);
|
//LangUtil.send("command.structure.main-menu", sender);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-5
@@ -1,5 +1,8 @@
|
|||||||
package com.dfsek.terra.addons.structure.command.structure;
|
package com.dfsek.terra.addons.structure.command.structure;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.structure.command.structure.argument.ScriptArgumentParser;
|
||||||
|
import com.dfsek.terra.addons.structure.command.structure.completer.RotationCompleter;
|
||||||
|
import com.dfsek.terra.addons.structure.command.structure.completer.ScriptCompleter;
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.command.CommandTemplate;
|
import com.dfsek.terra.api.command.CommandTemplate;
|
||||||
import com.dfsek.terra.api.command.annotation.Argument;
|
import com.dfsek.terra.api.command.annotation.Argument;
|
||||||
@@ -16,11 +19,8 @@ import com.dfsek.terra.api.entity.Player;
|
|||||||
import com.dfsek.terra.api.injection.annotations.Inject;
|
import com.dfsek.terra.api.injection.annotations.Inject;
|
||||||
import com.dfsek.terra.api.structure.Structure;
|
import com.dfsek.terra.api.structure.Structure;
|
||||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
import com.dfsek.terra.api.structure.rotation.Rotation;
|
||||||
import com.dfsek.terra.api.util.FastRandom;
|
|
||||||
import com.dfsek.terra.addons.structure.command.structure.argument.ScriptArgumentParser;
|
|
||||||
import com.dfsek.terra.addons.structure.command.structure.completer.RotationCompleter;
|
|
||||||
import com.dfsek.terra.addons.structure.command.structure.completer.ScriptCompleter;
|
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
@PlayerCommand
|
@PlayerCommand
|
||||||
@@ -66,7 +66,7 @@ public class StructureLoadCommand implements CommandTemplate {
|
|||||||
Player player = (Player) sender;
|
Player player = (Player) sender;
|
||||||
|
|
||||||
long t = System.nanoTime();
|
long t = System.nanoTime();
|
||||||
FastRandom random = new FastRandom(ThreadLocalRandom.current().nextLong());
|
Random random = new Random(ThreadLocalRandom.current().nextLong());
|
||||||
Rotation r;
|
Rotation r;
|
||||||
try {
|
try {
|
||||||
r = Rotation.fromDegrees(rotation);
|
r = Rotation.fromDegrees(rotation);
|
||||||
|
|||||||
+7
-8
@@ -1,5 +1,8 @@
|
|||||||
package com.dfsek.terra.addons.structure.command.structure;
|
package com.dfsek.terra.addons.structure.command.structure;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.structure.command.AsyncStructureFinder;
|
||||||
|
import com.dfsek.terra.addons.structure.command.structure.argument.StructureArgumentParser;
|
||||||
|
import com.dfsek.terra.addons.structure.command.structure.completer.StructureCompleter;
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.command.CommandTemplate;
|
import com.dfsek.terra.api.command.CommandTemplate;
|
||||||
import com.dfsek.terra.api.command.annotation.Argument;
|
import com.dfsek.terra.api.command.annotation.Argument;
|
||||||
@@ -13,12 +16,8 @@ import com.dfsek.terra.api.command.arg.IntegerArgumentParser;
|
|||||||
import com.dfsek.terra.api.entity.CommandSender;
|
import com.dfsek.terra.api.entity.CommandSender;
|
||||||
import com.dfsek.terra.api.entity.Player;
|
import com.dfsek.terra.api.entity.Player;
|
||||||
import com.dfsek.terra.api.injection.annotations.Inject;
|
import com.dfsek.terra.api.injection.annotations.Inject;
|
||||||
|
import com.dfsek.terra.api.structure.ConfiguredStructure;
|
||||||
import com.dfsek.terra.api.vector.Vector3;
|
import com.dfsek.terra.api.vector.Vector3;
|
||||||
import com.dfsek.terra.api.world.locate.AsyncStructureFinder;
|
|
||||||
import com.dfsek.terra.addons.structure.command.structure.argument.StructureArgumentParser;
|
|
||||||
import com.dfsek.terra.addons.structure.command.structure.completer.StructureCompleter;
|
|
||||||
import com.dfsek.terra.config.lang.LangUtil;
|
|
||||||
import com.dfsek.terra.world.population.items.TerraStructure;
|
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
@@ -50,7 +49,7 @@ public class StructureLocateCommand implements CommandTemplate {
|
|||||||
private TerraPlugin main;
|
private TerraPlugin main;
|
||||||
|
|
||||||
@ArgumentTarget("structure")
|
@ArgumentTarget("structure")
|
||||||
private TerraStructure structure;
|
private ConfiguredStructure structure;
|
||||||
|
|
||||||
@ArgumentTarget("radius")
|
@ArgumentTarget("radius")
|
||||||
private Integer radius;
|
private Integer radius;
|
||||||
@@ -64,11 +63,11 @@ public class StructureLocateCommand implements CommandTemplate {
|
|||||||
|
|
||||||
new Thread(new AsyncStructureFinder(main.getWorld(player.world()).getBiomeProvider(), structure, player.position().clone().multiply((1D / main.getTerraConfig().getBiomeSearchResolution())), player.world(), 0, radius, location -> {
|
new Thread(new AsyncStructureFinder(main.getWorld(player.world()).getBiomeProvider(), structure, player.position().clone().multiply((1D / main.getTerraConfig().getBiomeSearchResolution())), player.world(), 0, radius, location -> {
|
||||||
if(location != null) {
|
if(location != null) {
|
||||||
sender.sendMessage(String.format("The nearest %s is at [%d, ~, %d] (%.1f blocks away)", structure.getTemplate().getID().toLowerCase(Locale.ROOT), location.getBlockX(), location.getBlockZ(), location.add(new Vector3(0, player.position().getY(), 0)).distance(player.position())));
|
sender.sendMessage(String.format("The nearest %s is at [%d, ~, %d] (%.1f blocks away)", structure.getID().toLowerCase(Locale.ROOT), location.getBlockX(), location.getBlockZ(), location.add(new Vector3(0, player.position().getY(), 0)).distance(player.position())));
|
||||||
if(teleport) {
|
if(teleport) {
|
||||||
main.runPossiblyUnsafeTask(() -> player.position(new Vector3(location.getX(), player.position().getY(), location.getZ())));
|
main.runPossiblyUnsafeTask(() -> player.position(new Vector3(location.getX(), player.position().getY(), location.getZ())));
|
||||||
}
|
}
|
||||||
} else LangUtil.send("command.biome.unable-to-locate", sender);
|
} //else LangUtil.send("command.biome.unable-to-locate", sender);
|
||||||
}, main), "Biome Location Thread").start();
|
}, main), "Biome Location Thread").start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -14,6 +14,6 @@ public class ScriptArgumentParser implements ArgumentParser<Structure> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Structure parse(CommandSender sender, String arg) {
|
public Structure parse(CommandSender sender, String arg) {
|
||||||
return main.getWorld(((Player) sender).world()).getConfig().getRegistry(StructureScript.class).get(arg);
|
return main.getWorld(((Player) sender).world()).getConfig().getRegistry(Structure.class).get(arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -6,7 +6,6 @@ import com.dfsek.terra.api.entity.CommandSender;
|
|||||||
import com.dfsek.terra.api.entity.Player;
|
import com.dfsek.terra.api.entity.Player;
|
||||||
import com.dfsek.terra.api.injection.annotations.Inject;
|
import com.dfsek.terra.api.injection.annotations.Inject;
|
||||||
import com.dfsek.terra.api.structure.ConfiguredStructure;
|
import com.dfsek.terra.api.structure.ConfiguredStructure;
|
||||||
import com.dfsek.terra.world.population.items.TerraStructure;
|
|
||||||
|
|
||||||
public class StructureArgumentParser implements ArgumentParser<ConfiguredStructure> {
|
public class StructureArgumentParser implements ArgumentParser<ConfiguredStructure> {
|
||||||
@Inject
|
@Inject
|
||||||
@@ -14,6 +13,6 @@ public class StructureArgumentParser implements ArgumentParser<ConfiguredStructu
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ConfiguredStructure parse(CommandSender sender, String arg) {
|
public ConfiguredStructure parse(CommandSender sender, String arg) {
|
||||||
return main.getWorld(((Player) sender).world()).getConfig().getRegistry(TerraStructure.class).get(arg);
|
return main.getWorld(((Player) sender).world()).getConfig().getRegistry(ConfiguredStructure.class).get(arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -6,7 +6,6 @@ import com.dfsek.terra.api.entity.CommandSender;
|
|||||||
import com.dfsek.terra.api.entity.Player;
|
import com.dfsek.terra.api.entity.Player;
|
||||||
import com.dfsek.terra.api.injection.annotations.Inject;
|
import com.dfsek.terra.api.injection.annotations.Inject;
|
||||||
import com.dfsek.terra.api.structure.Structure;
|
import com.dfsek.terra.api.structure.Structure;
|
||||||
import com.dfsek.terra.addons.structure.structures.script.StructureScript;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -17,6 +16,6 @@ public class ScriptCompleter implements TabCompleter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> complete(CommandSender sender) {
|
public List<String> complete(CommandSender sender) {
|
||||||
return main.getWorld(((Player) sender).world()).getConfig().getRegistry(StructureScript.class).entries().stream().map(Structure::getId).collect(Collectors.toList());
|
return main.getWorld(((Player) sender).world()).getConfig().getRegistry(Structure.class).entries().stream().map(Structure::getId).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -5,7 +5,7 @@ import com.dfsek.terra.api.command.tab.TabCompleter;
|
|||||||
import com.dfsek.terra.api.entity.CommandSender;
|
import com.dfsek.terra.api.entity.CommandSender;
|
||||||
import com.dfsek.terra.api.entity.Player;
|
import com.dfsek.terra.api.entity.Player;
|
||||||
import com.dfsek.terra.api.injection.annotations.Inject;
|
import com.dfsek.terra.api.injection.annotations.Inject;
|
||||||
import com.dfsek.terra.world.population.items.TerraStructure;
|
import com.dfsek.terra.api.structure.ConfiguredStructure;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -17,6 +17,6 @@ public class StructureCompleter implements TabCompleter {
|
|||||||
@Override
|
@Override
|
||||||
public List<String> complete(CommandSender sender) {
|
public List<String> complete(CommandSender sender) {
|
||||||
Player player = (Player) sender;
|
Player player = (Player) sender;
|
||||||
return new ArrayList<>(main.getWorld(player.world()).getConfig().getRegistry(TerraStructure.class).keys());
|
return new ArrayList<>(main.getWorld(player.world()).getConfig().getRegistry(ConfiguredStructure.class).keys());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -7,11 +7,11 @@ import com.dfsek.terra.addons.structure.structures.loot.functions.AmountFunction
|
|||||||
import com.dfsek.terra.addons.structure.structures.loot.functions.DamageFunction;
|
import com.dfsek.terra.addons.structure.structures.loot.functions.DamageFunction;
|
||||||
import com.dfsek.terra.addons.structure.structures.loot.functions.EnchantFunction;
|
import com.dfsek.terra.addons.structure.structures.loot.functions.EnchantFunction;
|
||||||
import com.dfsek.terra.addons.structure.structures.loot.functions.LootFunction;
|
import com.dfsek.terra.addons.structure.structures.loot.functions.LootFunction;
|
||||||
import com.dfsek.terra.api.util.GlueList;
|
|
||||||
import net.jafama.FastMath;
|
import net.jafama.FastMath;
|
||||||
import org.json.simple.JSONArray;
|
import org.json.simple.JSONArray;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ import java.util.Random;
|
|||||||
public class Entry {
|
public class Entry {
|
||||||
private final Item item;
|
private final Item item;
|
||||||
private final long weight;
|
private final long weight;
|
||||||
private final List<LootFunction> functions = new GlueList<>();
|
private final List<LootFunction> functions = new ArrayList<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates an Entry from a JSON representation.
|
* Instantiates an Entry from a JSON representation.
|
||||||
|
|||||||
+3
-3
@@ -3,12 +3,12 @@ package com.dfsek.terra.addons.structure.structures.loot;
|
|||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.inventory.Inventory;
|
import com.dfsek.terra.api.inventory.Inventory;
|
||||||
import com.dfsek.terra.api.inventory.ItemStack;
|
import com.dfsek.terra.api.inventory.ItemStack;
|
||||||
import com.dfsek.terra.api.util.GlueList;
|
|
||||||
import org.json.simple.JSONArray;
|
import org.json.simple.JSONArray;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
import org.json.simple.parser.JSONParser;
|
import org.json.simple.parser.JSONParser;
|
||||||
import org.json.simple.parser.ParseException;
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
@@ -16,7 +16,7 @@ import java.util.Random;
|
|||||||
* Class representation of a Loot Table to populate chest loot.
|
* Class representation of a Loot Table to populate chest loot.
|
||||||
*/
|
*/
|
||||||
public class LootTableImpl implements com.dfsek.terra.api.structure.LootTable {
|
public class LootTableImpl implements com.dfsek.terra.api.structure.LootTable {
|
||||||
private final List<Pool> pools = new GlueList<>();
|
private final List<Pool> pools = new ArrayList<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a LootTable from a JSON String.
|
* Instantiates a LootTable from a JSON String.
|
||||||
@@ -35,7 +35,7 @@ public class LootTableImpl implements com.dfsek.terra.api.structure.LootTable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ItemStack> getLoot(Random r) {
|
public List<ItemStack> getLoot(Random r) {
|
||||||
List<ItemStack> itemList = new GlueList<>();
|
List<ItemStack> itemList = new ArrayList<>();
|
||||||
for(Pool pool : pools) {
|
for(Pool pool : pools) {
|
||||||
itemList.addAll(pool.getItems(r));
|
itemList.addAll(pool.getItems(r));
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-3
@@ -2,13 +2,12 @@ package com.dfsek.terra.addons.structure.structures.loot;
|
|||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.inventory.ItemStack;
|
import com.dfsek.terra.api.inventory.ItemStack;
|
||||||
import com.dfsek.terra.api.util.GlueList;
|
|
||||||
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
|
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
|
||||||
import com.dfsek.terra.api.util.collections.ProbabilityCollectionImpl;
|
|
||||||
import net.jafama.FastMath;
|
import net.jafama.FastMath;
|
||||||
import org.json.simple.JSONArray;
|
import org.json.simple.JSONArray;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
@@ -51,7 +50,7 @@ public class Pool {
|
|||||||
public List<ItemStack> getItems(Random r) {
|
public List<ItemStack> getItems(Random r) {
|
||||||
|
|
||||||
int rolls = r.nextInt(max - min + 1) + min;
|
int rolls = r.nextInt(max - min + 1) + min;
|
||||||
List<ItemStack> items = new GlueList<>();
|
List<ItemStack> items = new ArrayList<>();
|
||||||
for(int i = 0; i < rolls; i++) {
|
for(int i = 0; i < rolls; i++) {
|
||||||
items.add(entries.get(r).getItem(r));
|
items.add(entries.get(r).getItem(r));
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -4,10 +4,10 @@ import com.dfsek.terra.api.TerraPlugin;
|
|||||||
import com.dfsek.terra.api.inventory.ItemStack;
|
import com.dfsek.terra.api.inventory.ItemStack;
|
||||||
import com.dfsek.terra.api.inventory.item.Enchantment;
|
import com.dfsek.terra.api.inventory.item.Enchantment;
|
||||||
import com.dfsek.terra.api.inventory.item.ItemMeta;
|
import com.dfsek.terra.api.inventory.item.ItemMeta;
|
||||||
import com.dfsek.terra.api.util.GlueList;
|
|
||||||
import net.jafama.FastMath;
|
import net.jafama.FastMath;
|
||||||
import org.json.simple.JSONArray;
|
import org.json.simple.JSONArray;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
@@ -38,7 +38,7 @@ public class EnchantFunction implements LootFunction {
|
|||||||
if(original.getItemMeta() == null) return original;
|
if(original.getItemMeta() == null) return original;
|
||||||
|
|
||||||
double enchant = (r.nextDouble() * (max - min)) + min;
|
double enchant = (r.nextDouble() * (max - min)) + min;
|
||||||
List<Enchantment> possible = new GlueList<>();
|
List<Enchantment> possible = new ArrayList<>();
|
||||||
for(Enchantment ench : main.getItemHandle().getEnchantments()) {
|
for(Enchantment ench : main.getItemHandle().getEnchantments()) {
|
||||||
if(ench.canEnchantItem(original) && (disabled == null || !this.disabled.contains(ench.getID()))) {
|
if(ench.canEnchantItem(original) && (disabled == null || !this.disabled.contains(ench.getID()))) {
|
||||||
possible.add(ench);
|
possible.add(ench);
|
||||||
|
|||||||
@@ -9,4 +9,6 @@ public interface ConfiguredStructure {
|
|||||||
Range getSpawnStart();
|
Range getSpawnStart();
|
||||||
|
|
||||||
StructureSpawn getSpawn();
|
StructureSpawn getSpawn();
|
||||||
|
|
||||||
|
String getID();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ public final class FabricUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
Pair<PreLoadCompatibilityOptions, PostLoadCompatibilityOptions> pair = fabricAddon.getTemplates().get(pack);
|
Pair<PreLoadCompatibilityOptions, PostLoadCompatibilityOptions> pair = fabricAddon.getTemplates().get(pack);
|
||||||
PreLoadCompatibilityOptions compatibilityOptions = pair.getLeft();
|
PreLoadCompatibilityOptions compatibilityOptions = pair.getLeft();
|
||||||
PostLoadCompatibilityOptions postLoadCompatibilityOptions = pair.getRight();
|
PostLoadCompatibilityOptions postLoadCompatibilityOptions = pair.getRight();
|
||||||
@@ -100,6 +101,8 @@ public final class FabricUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
BiomeEffectsAccessor accessor = (BiomeEffectsAccessor) vanilla.getEffects();
|
BiomeEffectsAccessor accessor = (BiomeEffectsAccessor) vanilla.getEffects();
|
||||||
BiomeEffects.Builder effects = new BiomeEffects.Builder()
|
BiomeEffects.Builder effects = new BiomeEffects.Builder()
|
||||||
.waterColor(colors.getOrDefault("water", accessor.getWaterColor()))
|
.waterColor(colors.getOrDefault("water", accessor.getWaterColor()))
|
||||||
|
|||||||
Reference in New Issue
Block a user