diff --git a/src/main/java/com/dfsek/terra/api/bukkit/BukkitWorld.java b/src/main/java/com/dfsek/terra/api/bukkit/BukkitWorld.java index 0af1b0652..3aa4b5a78 100644 --- a/src/main/java/com/dfsek/terra/api/bukkit/BukkitWorld.java +++ b/src/main/java/com/dfsek/terra/api/bukkit/BukkitWorld.java @@ -1,9 +1,12 @@ package com.dfsek.terra.api.bukkit; import com.dfsek.terra.api.bukkit.generator.BukkitChunkGenerator; +import com.dfsek.terra.api.bukkit.world.block.BukkitBlock; import com.dfsek.terra.api.generic.generator.ChunkGenerator; import com.dfsek.terra.api.generic.world.Chunk; import com.dfsek.terra.api.generic.world.World; +import com.dfsek.terra.api.generic.world.block.Block; +import com.dfsek.terra.api.generic.world.vector.Location; import java.io.File; import java.util.UUID; @@ -32,27 +35,37 @@ public class BukkitWorld implements World { @Override public String getName() { - return null; + return delegate.getName(); } @Override public UUID getUID() { - return null; + return delegate.getUID(); } @Override public boolean isChunkGenerated(int x, int z) { - return false; + return delegate.isChunkGenerated(x, z); } @Override public Chunk getChunkAt(int x, int z) { - return null; + return new BukkitChunk(delegate.getChunkAt(x, z)); } @Override public File getWorldFolder() { - return null; + return delegate.getWorldFolder(); + } + + @Override + public Block getBlockAt(int x, int y, int z) { + return new BukkitBlock(delegate.getBlockAt(x, y, z)); + } + + @Override + public Block getBlockAt(Location l) { + return new BukkitBlock(delegate.getBlockAt(l.getBlockX(), l.getBlockY(), l.getBlockZ())); } @Override diff --git a/src/main/java/com/dfsek/terra/api/bukkit/TerraBukkitPlugin.java b/src/main/java/com/dfsek/terra/api/bukkit/TerraBukkitPlugin.java index 9bd692ca0..b2c55729f 100644 --- a/src/main/java/com/dfsek/terra/api/bukkit/TerraBukkitPlugin.java +++ b/src/main/java/com/dfsek/terra/api/bukkit/TerraBukkitPlugin.java @@ -137,6 +137,7 @@ public class TerraBukkitPlugin extends GaeaPlugin implements TerraPlugin { } @NotNull + @Override public PluginConfig getTerraConfig() { return config; } diff --git a/src/main/java/com/dfsek/terra/api/gaea/population/GaeaBlockPopulator.java b/src/main/java/com/dfsek/terra/api/gaea/population/GaeaBlockPopulator.java deleted file mode 100644 index a074deca9..000000000 --- a/src/main/java/com/dfsek/terra/api/gaea/population/GaeaBlockPopulator.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.dfsek.terra.api.gaea.population; - -import org.bukkit.Chunk; -import org.bukkit.World; -import org.jetbrains.annotations.NotNull; - -import java.util.Random; - -public abstract class GaeaBlockPopulator { - public abstract void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk); -} diff --git a/src/main/java/com/dfsek/terra/api/gaea/population/PopulationManager.java b/src/main/java/com/dfsek/terra/api/gaea/population/PopulationManager.java index fbf3d78db..c790b63a7 100644 --- a/src/main/java/com/dfsek/terra/api/gaea/population/PopulationManager.java +++ b/src/main/java/com/dfsek/terra/api/gaea/population/PopulationManager.java @@ -7,7 +7,7 @@ import com.dfsek.terra.api.gaea.util.FastRandom; import com.dfsek.terra.api.gaea.util.GlueList; import com.dfsek.terra.api.gaea.util.SerializationUtil; import com.dfsek.terra.api.generic.TerraPlugin; -import com.dfsek.terra.api.generic.generator.BlockPopulator; +import com.dfsek.terra.api.generic.generator.TerraBlockPopulator; import com.dfsek.terra.api.generic.world.Chunk; import com.dfsek.terra.api.generic.world.World; import org.jetbrains.annotations.NotNull; @@ -18,22 +18,22 @@ import java.util.HashSet; import java.util.List; import java.util.Random; -public class PopulationManager implements BlockPopulator { - private final List attachedPopulators = new GlueList<>(); +public class PopulationManager implements TerraBlockPopulator { + private final List attachedPopulators = new GlueList<>(); private final HashSet needsPop = new HashSet<>(); private final TerraPlugin main; - private final Object popLock = new Object(); private WorldProfiler profiler; public PopulationManager(TerraPlugin main) { this.main = main; } - public void attach(BlockPopulator populator) { + public void attach(TerraBlockPopulator populator) { this.attachedPopulators.add(populator); } @Override + @SuppressWarnings("try") public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { try(ProfileFuture ignored = measure()) { needsPop.add(new ChunkCoordinate(chunk)); @@ -85,7 +85,7 @@ public class PopulationManager implements BlockPopulator { long zRand = (random.nextLong() / 2L << 1L) + 1L; random.setSeed((long) x * xRand + (long) z * zRand ^ w.getSeed()); Chunk currentChunk = w.getChunkAt(x, z); - for(BlockPopulator r : attachedPopulators) { + for(TerraBlockPopulator r : attachedPopulators) { r.populate(w, random, currentChunk); } needsPop.remove(c); diff --git a/src/main/java/com/dfsek/terra/api/gaea/tree/Tree.java b/src/main/java/com/dfsek/terra/api/gaea/tree/Tree.java index 0923f0635..5b78a34d4 100644 --- a/src/main/java/com/dfsek/terra/api/gaea/tree/Tree.java +++ b/src/main/java/com/dfsek/terra/api/gaea/tree/Tree.java @@ -1,7 +1,8 @@ package com.dfsek.terra.api.gaea.tree; -import org.bukkit.Location; -import org.bukkit.Material; + +import com.dfsek.terra.api.generic.world.block.MaterialData; +import com.dfsek.terra.api.generic.world.vector.Location; import java.util.Random; import java.util.Set; @@ -9,5 +10,5 @@ import java.util.Set; public interface Tree { boolean plant(Location l, Random r); - Set getSpawnable(); + Set getSpawnable(); } diff --git a/src/main/java/com/dfsek/terra/api/gaea/world/Flora.java b/src/main/java/com/dfsek/terra/api/gaea/world/Flora.java index c83e6a800..bd1aa95ea 100644 --- a/src/main/java/com/dfsek/terra/api/gaea/world/Flora.java +++ b/src/main/java/com/dfsek/terra/api/gaea/world/Flora.java @@ -1,9 +1,9 @@ package com.dfsek.terra.api.gaea.world; import com.dfsek.terra.api.gaea.math.Range; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.block.Block; +import com.dfsek.terra.api.generic.world.Chunk; +import com.dfsek.terra.api.generic.world.block.Block; +import com.dfsek.terra.api.generic.world.vector.Location; import java.util.List; diff --git a/src/main/java/com/dfsek/terra/api/generic/TerraPlugin.java b/src/main/java/com/dfsek/terra/api/generic/TerraPlugin.java index ac7ff029c..c96f2b94e 100644 --- a/src/main/java/com/dfsek/terra/api/generic/TerraPlugin.java +++ b/src/main/java/com/dfsek/terra/api/generic/TerraPlugin.java @@ -4,6 +4,7 @@ import com.dfsek.terra.TerraWorld; import com.dfsek.terra.api.LoaderRegistrar; import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.api.generic.world.WorldHandle; +import com.dfsek.terra.config.base.PluginConfig; import java.util.logging.Logger; @@ -15,4 +16,6 @@ public interface TerraPlugin extends LoaderRegistrar { TerraWorld getWorld(World world); Logger getLogger(); + + PluginConfig getTerraConfig(); } diff --git a/src/main/java/com/dfsek/terra/api/generic/generator/TerraBlockPopulator.java b/src/main/java/com/dfsek/terra/api/generic/generator/TerraBlockPopulator.java new file mode 100644 index 000000000..bc6b6dfb8 --- /dev/null +++ b/src/main/java/com/dfsek/terra/api/generic/generator/TerraBlockPopulator.java @@ -0,0 +1,10 @@ +package com.dfsek.terra.api.generic.generator; + +import com.dfsek.terra.api.generic.world.Chunk; +import com.dfsek.terra.api.generic.world.World; + +import java.util.Random; + +public interface TerraBlockPopulator { + void populate(World world, Random random, Chunk chunk); +} diff --git a/src/main/java/com/dfsek/terra/api/generic/world/BiomeGrid.java b/src/main/java/com/dfsek/terra/api/generic/world/BiomeGrid.java index b2df137dd..8c1a08c88 100644 --- a/src/main/java/com/dfsek/terra/api/generic/world/BiomeGrid.java +++ b/src/main/java/com/dfsek/terra/api/generic/world/BiomeGrid.java @@ -11,7 +11,6 @@ public interface BiomeGrid extends Handle { * @param x - 0-15 * @param z - 0-15 * @return Biome value - * @deprecated biomes are now 3-dimensional */ @NotNull Biome getBiome(int x, int z); @@ -33,7 +32,6 @@ public interface BiomeGrid extends Handle { * @param x - 0-15 * @param z - 0-15 * @param bio - Biome value - * @deprecated biomes are now 3-dimensional */ void setBiome(int x, int z, @NotNull Biome bio); diff --git a/src/main/java/com/dfsek/terra/api/generic/world/Chunk.java b/src/main/java/com/dfsek/terra/api/generic/world/Chunk.java index 1c9ed6b1e..e83ef4ab5 100644 --- a/src/main/java/com/dfsek/terra/api/generic/world/Chunk.java +++ b/src/main/java/com/dfsek/terra/api/generic/world/Chunk.java @@ -1,6 +1,7 @@ package com.dfsek.terra.api.generic.world; import com.dfsek.terra.api.generic.Handle; +import com.dfsek.terra.api.generic.world.block.Block; public interface Chunk extends Handle { int getX(); @@ -8,4 +9,6 @@ public interface Chunk extends Handle { int getZ(); World getWorld(); + + Block getBlock(int x, int y, int z); } diff --git a/src/main/java/com/dfsek/terra/api/generic/world/World.java b/src/main/java/com/dfsek/terra/api/generic/world/World.java index e32bc7309..e3ef05fbf 100644 --- a/src/main/java/com/dfsek/terra/api/generic/world/World.java +++ b/src/main/java/com/dfsek/terra/api/generic/world/World.java @@ -2,6 +2,8 @@ package com.dfsek.terra.api.generic.world; import com.dfsek.terra.api.generic.Handle; import com.dfsek.terra.api.generic.generator.ChunkGenerator; +import com.dfsek.terra.api.generic.world.block.Block; +import com.dfsek.terra.api.generic.world.vector.Location; import java.io.File; import java.util.UUID; @@ -22,4 +24,8 @@ public interface World extends Handle { Chunk getChunkAt(int x, int z); File getWorldFolder(); + + Block getBlockAt(int x, int y, int z); + + Block getBlockAt(Location l); } diff --git a/src/main/java/com/dfsek/terra/api/generic/world/WorldHandle.java b/src/main/java/com/dfsek/terra/api/generic/world/WorldHandle.java index 9936e42c7..1e33c4f50 100644 --- a/src/main/java/com/dfsek/terra/api/generic/world/WorldHandle.java +++ b/src/main/java/com/dfsek/terra/api/generic/world/WorldHandle.java @@ -1,9 +1,8 @@ package com.dfsek.terra.api.generic.world; +import com.dfsek.terra.api.generic.world.block.Block; +import com.dfsek.terra.api.generic.world.block.BlockData; import com.dfsek.terra.api.generic.world.block.MaterialData; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.data.BlockData; /** * Interface to be implemented for world manipulation. @@ -13,9 +12,9 @@ public interface WorldHandle { BlockData getBlockData(Block block); - Material getType(Block block); + MaterialData getType(Block block); - com.dfsek.terra.api.generic.world.block.BlockData createBlockData(String data); + BlockData createBlockData(String data); MaterialData createMaterialData(String data); } diff --git a/src/main/java/com/dfsek/terra/api/generic/world/block/Block.java b/src/main/java/com/dfsek/terra/api/generic/world/block/Block.java index 691c1080f..6f439ffa5 100644 --- a/src/main/java/com/dfsek/terra/api/generic/world/block/Block.java +++ b/src/main/java/com/dfsek/terra/api/generic/world/block/Block.java @@ -1,9 +1,26 @@ package com.dfsek.terra.api.generic.world.block; import com.dfsek.terra.api.generic.Handle; +import com.dfsek.terra.api.generic.world.vector.Location; public interface Block extends Handle { void setBlockData(BlockData data, boolean physics); BlockData getBlockData(); + + Block getRelative(BlockFace face); + + Block getRelative(BlockFace face, int len); + + boolean isEmpty(); + + Location getLocation(); + + MaterialData getType(); + + int getX(); + + int getZ(); + + int getY(); } diff --git a/src/main/java/com/dfsek/terra/api/generic/world/block/BlockData.java b/src/main/java/com/dfsek/terra/api/generic/world/block/BlockData.java index 50200660d..2a9d02fb1 100644 --- a/src/main/java/com/dfsek/terra/api/generic/world/block/BlockData.java +++ b/src/main/java/com/dfsek/terra/api/generic/world/block/BlockData.java @@ -2,8 +2,10 @@ package com.dfsek.terra.api.generic.world.block; import com.dfsek.terra.api.generic.Handle; -public interface BlockData extends Handle, Cloneable { +public interface BlockData extends Cloneable, Handle { MaterialData getMaterial(); boolean matches(MaterialData materialData); + + BlockData clone(); } diff --git a/src/main/java/com/dfsek/terra/api/generic/world/block/MaterialData.java b/src/main/java/com/dfsek/terra/api/generic/world/block/MaterialData.java index d632c52d1..628192332 100644 --- a/src/main/java/com/dfsek/terra/api/generic/world/block/MaterialData.java +++ b/src/main/java/com/dfsek/terra/api/generic/world/block/MaterialData.java @@ -7,4 +7,5 @@ public interface MaterialData extends Handle { boolean matches(BlockData other); + boolean isSolid(); } diff --git a/src/main/java/com/dfsek/terra/api/generic/world/block/data/MultipleFacing.java b/src/main/java/com/dfsek/terra/api/generic/world/block/data/MultipleFacing.java new file mode 100644 index 000000000..e07b1ce02 --- /dev/null +++ b/src/main/java/com/dfsek/terra/api/generic/world/block/data/MultipleFacing.java @@ -0,0 +1,12 @@ +package com.dfsek.terra.api.generic.world.block.data; + +import com.dfsek.terra.api.generic.world.block.BlockData; +import com.dfsek.terra.api.generic.world.block.BlockFace; + +import java.util.Set; + +public interface MultipleFacing extends BlockData { + Set getFaces(); + + void setFace(BlockFace face, boolean facing); +} diff --git a/src/main/java/com/dfsek/terra/api/generic/world/block/data/Rotatable.java b/src/main/java/com/dfsek/terra/api/generic/world/block/data/Rotatable.java new file mode 100644 index 000000000..25842bec7 --- /dev/null +++ b/src/main/java/com/dfsek/terra/api/generic/world/block/data/Rotatable.java @@ -0,0 +1,10 @@ +package com.dfsek.terra.api.generic.world.block.data; + +import com.dfsek.terra.api.generic.world.block.BlockData; +import com.dfsek.terra.api.generic.world.block.BlockFace; + +public interface Rotatable extends BlockData { + BlockFace getRotation(); + + void setRotation(BlockFace face); +} diff --git a/src/main/java/com/dfsek/terra/api/generic/world/vector/Location.java b/src/main/java/com/dfsek/terra/api/generic/world/vector/Location.java index 81fdf0b9d..62409e5b1 100644 --- a/src/main/java/com/dfsek/terra/api/generic/world/vector/Location.java +++ b/src/main/java/com/dfsek/terra/api/generic/world/vector/Location.java @@ -1,6 +1,7 @@ package com.dfsek.terra.api.generic.world.vector; import com.dfsek.terra.api.generic.world.World; +import com.dfsek.terra.api.generic.world.block.Block; public class Location implements Cloneable { private final World world; @@ -36,4 +37,44 @@ public class Location implements Cloneable { public int getBlockZ() { return vector.getBlockZ(); } + + public double getY() { + return vector.getY(); + } + + public Location setY(double y) { + vector.setY(y); + return this; + } + + public double getX() { + return vector.getX(); + } + + public Location setX(double x) { + vector.setX(x); + return this; + } + + public double getZ() { + return vector.getZ(); + } + + public Location setZ(double z) { + vector.setZ(z); + return this; + } + + public World getWorld() { + return world; + } + + public Location add(double x, double y, double z) { + vector.add(x, y, z); + return this; + } + + public Block getBlock() { + return world.getBlockAt(this); + } } diff --git a/src/main/java/com/dfsek/terra/carving/CarverCache.java b/src/main/java/com/dfsek/terra/carving/CarverCache.java index 041f4ec09..02c5040ab 100644 --- a/src/main/java/com/dfsek/terra/carving/CarverCache.java +++ b/src/main/java/com/dfsek/terra/carving/CarverCache.java @@ -1,12 +1,12 @@ package com.dfsek.terra.carving; -import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; import com.dfsek.terra.api.gaea.biome.Biome; import com.dfsek.terra.api.gaea.generation.GenerationPhase; import com.dfsek.terra.api.gaea.math.MathUtil; import com.dfsek.terra.api.gaea.util.FastRandom; import com.dfsek.terra.api.gaea.util.GlueList; import com.dfsek.terra.api.gaea.world.carving.Worm; +import com.dfsek.terra.api.generic.TerraPlugin; import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.api.generic.world.vector.Vector3; import com.dfsek.terra.biome.UserDefinedBiome; @@ -21,9 +21,9 @@ public class CarverCache { private final World w; private final Map> carvers = new HashMap<>(); - private final TerraBukkitPlugin main; + private final TerraPlugin main; - public CarverCache(World w, TerraBukkitPlugin main) { + public CarverCache(World w, TerraPlugin main) { this.w = w; this.main = main; } diff --git a/src/main/java/com/dfsek/terra/carving/Cavern.java b/src/main/java/com/dfsek/terra/carving/Cavern.java deleted file mode 100644 index ca40a9cf0..000000000 --- a/src/main/java/com/dfsek/terra/carving/Cavern.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.dfsek.terra.carving; - -import com.dfsek.terra.api.gaea.math.FastNoiseLite; -import com.dfsek.terra.api.gaea.math.MathUtil; -import com.dfsek.terra.api.gaea.util.FastRandom; -import com.dfsek.terra.procgen.GridSpawn; -import com.dfsek.terra.procgen.voxel.DeformedSphere; -import com.dfsek.terra.procgen.voxel.Tube; -import com.dfsek.terra.procgen.voxel.VoxelGeometry; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.util.Vector; - -import java.util.Random; - -public class Cavern { - private final Node node; - private final long seed; - - public Cavern(World w) { - this.node = new Node(w); - this.seed = w.getSeed(); - } - - public VoxelGeometry carveChunk(int chunkX, int chunkZ) { - long seedC = MathUtil.getCarverChunkSeed(chunkX, chunkZ, seed); - Random chunk = new FastRandom(seedC); - Vector org = node.getNodeLocation((chunkX << 4) + 8, (chunkZ << 4) + 8).clone().setY(chunk.nextInt(128)); - VoxelGeometry carve = VoxelGeometry.getBlank(); - - FastNoiseLite smpl = new FastNoiseLite((int) seedC); - smpl.setFrequency(0.01f); - smpl.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2); - Bukkit.getLogger().info("Cavern: " + org.toString()); - carve.merge(new DeformedSphere(org.clone(), chunk.nextInt(4) + 3, 0.75, smpl)); - - Vector _00 = new Vector(org.getX() + 16, new FastRandom(MathUtil.getCarverChunkSeed(chunkX + 1, chunkZ, seed)).nextInt(128), org.getZ()); - - carve.merge(new Tube(org, _00, 4)); - return carve; - } - - public static class Node { - private final long seed; - private final GridSpawn spawn = new GridSpawn(16, 0, 0); - - public Node(World w) { - this.seed = w.getSeed(); - } - - public Vector getNodeLocation(int x, int z) { - return spawn.getNearestSpawn(x, z, seed); - } - } -} diff --git a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java index 0fe710463..2d78c2407 100644 --- a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java +++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java @@ -1,11 +1,11 @@ package com.dfsek.terra.carving; -import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; import com.dfsek.terra.api.gaea.generation.GenerationPhase; import com.dfsek.terra.api.gaea.math.Range; import com.dfsek.terra.api.gaea.util.FastRandom; import com.dfsek.terra.api.gaea.world.carving.Carver; import com.dfsek.terra.api.gaea.world.carving.Worm; +import com.dfsek.terra.api.generic.TerraPlugin; import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.api.generic.world.vector.Vector3; import com.dfsek.terra.biome.UserDefinedBiome; @@ -43,9 +43,9 @@ public class UserDefinedCarver extends Carver { private double step = 2; private Range recalc = new Range(8, 10); private double recalcMagnitude = 3; - private final TerraBukkitPlugin main; + private final TerraPlugin main; - public UserDefinedCarver(Range height, Range length, double[] start, double[] mutate, List radii, Scope parent, long hash, int topCut, int bottomCut, CarverTemplate config, TerraBukkitPlugin main) throws ParseException { + public UserDefinedCarver(Range height, Range length, double[] start, double[] mutate, List radii, Scope parent, long hash, int topCut, int bottomCut, CarverTemplate config, TerraPlugin main) throws ParseException { super(height.getMin(), height.getMax()); this.length = length; this.start = start; diff --git a/src/main/java/com/dfsek/terra/config/factories/OreFactory.java b/src/main/java/com/dfsek/terra/config/factories/OreFactory.java index 3b6f043bc..a07f4847c 100644 --- a/src/main/java/com/dfsek/terra/config/factories/OreFactory.java +++ b/src/main/java/com/dfsek/terra/config/factories/OreFactory.java @@ -1,11 +1,11 @@ package com.dfsek.terra.config.factories; import com.dfsek.terra.api.generic.TerraPlugin; +import com.dfsek.terra.api.generic.world.block.BlockData; import com.dfsek.terra.config.templates.OreTemplate; import com.dfsek.terra.generation.items.ores.DeformedSphereOre; import com.dfsek.terra.generation.items.ores.Ore; import com.dfsek.terra.generation.items.ores.VanillaOre; -import org.bukkit.block.data.BlockData; public class OreFactory implements TerraFactory { @Override diff --git a/src/main/java/com/dfsek/terra/config/loaders/MaterialSetLoader.java b/src/main/java/com/dfsek/terra/config/loaders/MaterialSetLoader.java index f9af8b732..c582f8714 100644 --- a/src/main/java/com/dfsek/terra/config/loaders/MaterialSetLoader.java +++ b/src/main/java/com/dfsek/terra/config/loaders/MaterialSetLoader.java @@ -3,6 +3,7 @@ package com.dfsek.terra.config.loaders; import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.TypeLoader; +import com.dfsek.terra.api.generic.world.block.MaterialData; import com.dfsek.terra.util.MaterialSet; import org.bukkit.Material; @@ -19,7 +20,7 @@ public class MaterialSetLoader implements TypeLoader { for(String string : stringData) { try { if(string.startsWith("#")) set.addTag(string.substring(1)); - else set.add((Material) configLoader.loadType(Material.class, string)); + else set.add((MaterialData) configLoader.loadType(Material.class, string)); } catch(NullPointerException e) { throw new LoadException("Invalid data identifier \"" + string + "\"", e); } diff --git a/src/main/java/com/dfsek/terra/config/loaders/palette/PaletteHolderLoader.java b/src/main/java/com/dfsek/terra/config/loaders/palette/PaletteHolderLoader.java index 2d8432264..612877bd8 100644 --- a/src/main/java/com/dfsek/terra/config/loaders/palette/PaletteHolderLoader.java +++ b/src/main/java/com/dfsek/terra/config/loaders/palette/PaletteHolderLoader.java @@ -4,10 +4,10 @@ import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.terra.api.gaea.world.palette.Palette; +import com.dfsek.terra.api.generic.world.block.BlockData; import com.dfsek.terra.biome.palette.PaletteHolder; import com.dfsek.terra.biome.palette.PaletteHolderBuilder; import com.dfsek.terra.config.loaders.Types; -import org.bukkit.block.data.BlockData; import java.lang.reflect.Type; import java.util.List; diff --git a/src/main/java/com/dfsek/terra/config/templates/OreTemplate.java b/src/main/java/com/dfsek/terra/config/templates/OreTemplate.java index b728a3739..20f6c7b1f 100644 --- a/src/main/java/com/dfsek/terra/config/templates/OreTemplate.java +++ b/src/main/java/com/dfsek/terra/config/templates/OreTemplate.java @@ -4,9 +4,9 @@ import com.dfsek.tectonic.annotations.Abstractable; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; import com.dfsek.terra.api.gaea.math.Range; +import com.dfsek.terra.api.generic.world.block.BlockData; import com.dfsek.terra.generation.items.ores.Ore; import com.dfsek.terra.util.MaterialSet; -import org.bukkit.block.data.BlockData; @SuppressWarnings({"unused", "FieldMayBeFinal"}) public class OreTemplate extends AbstractableTemplate { diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 333e68f3b..e4c0e9de4 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -95,6 +95,7 @@ public class TerraChunkGenerator implements com.dfsek.terra.api.generic.generato @Override + @SuppressWarnings({"deprecation", "try"}) public void generateChunkData(@NotNull World world, @NotNull Random random, int chunkX, int chunkZ, @NotNull BiomeGrid biome, ChunkGenerator.ChunkData chunk) { TerraWorld tw = main.getWorld(world); com.dfsek.terra.api.gaea.biome.BiomeGrid grid = tw.getGrid(); @@ -165,6 +166,7 @@ public class TerraChunkGenerator implements com.dfsek.terra.api.generic.generato int cx = xOrig + (x << 2); int cz = zOrig + (z << 2); Biome b = grid.getBiome(cx, cz, GenerationPhase.PALETTE_APPLY); + biome.setBiome(x << 2, z << 2, b.getVanillaBiome()); } } diff --git a/src/main/java/com/dfsek/terra/generation/items/PlaceableLayer.java b/src/main/java/com/dfsek/terra/generation/items/PlaceableLayer.java index 4370e0fcd..77cdce7ed 100644 --- a/src/main/java/com/dfsek/terra/generation/items/PlaceableLayer.java +++ b/src/main/java/com/dfsek/terra/generation/items/PlaceableLayer.java @@ -3,8 +3,8 @@ package com.dfsek.terra.generation.items; import com.dfsek.terra.api.gaea.math.FastNoiseLite; import com.dfsek.terra.api.gaea.math.ProbabilityCollection; import com.dfsek.terra.api.gaea.math.Range; +import com.dfsek.terra.api.generic.world.Chunk; import com.dfsek.terra.api.generic.world.vector.Vector2; -import org.bukkit.Chunk; import java.util.Random; diff --git a/src/main/java/com/dfsek/terra/generation/items/flora/BlockFlora.java b/src/main/java/com/dfsek/terra/generation/items/flora/BlockFlora.java index e89d875dc..a8013e3d7 100644 --- a/src/main/java/com/dfsek/terra/generation/items/flora/BlockFlora.java +++ b/src/main/java/com/dfsek/terra/generation/items/flora/BlockFlora.java @@ -3,11 +3,11 @@ package com.dfsek.terra.generation.items.flora; import com.dfsek.terra.api.gaea.math.Range; import com.dfsek.terra.api.gaea.util.GlueList; import com.dfsek.terra.api.gaea.world.Flora; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.data.BlockData; +import com.dfsek.terra.api.generic.world.Chunk; +import com.dfsek.terra.api.generic.world.block.Block; +import com.dfsek.terra.api.generic.world.block.BlockData; +import com.dfsek.terra.api.generic.world.block.BlockFace; +import com.dfsek.terra.api.generic.world.vector.Location; import java.util.List; @@ -38,7 +38,7 @@ public class BlockFlora implements Flora { @Override public boolean plant(Location location) { - location.add(0, 1, 0).getBlock().setBlockData(data); + location.add(0, 1, 0).getBlock().setBlockData(data, true); return true; } } diff --git a/src/main/java/com/dfsek/terra/generation/items/flora/FloraLayer.java b/src/main/java/com/dfsek/terra/generation/items/flora/FloraLayer.java index a2b7fdf6f..80812adcd 100644 --- a/src/main/java/com/dfsek/terra/generation/items/flora/FloraLayer.java +++ b/src/main/java/com/dfsek/terra/generation/items/flora/FloraLayer.java @@ -4,9 +4,9 @@ import com.dfsek.terra.api.gaea.math.FastNoiseLite; import com.dfsek.terra.api.gaea.math.ProbabilityCollection; import com.dfsek.terra.api.gaea.math.Range; import com.dfsek.terra.api.gaea.world.Flora; +import com.dfsek.terra.api.generic.world.Chunk; import com.dfsek.terra.api.generic.world.vector.Vector2; import com.dfsek.terra.generation.items.PlaceableLayer; -import org.bukkit.Chunk; import java.util.Random; @@ -20,6 +20,7 @@ public class FloraLayer extends PlaceableLayer { return density; } + @Override public void place(Chunk chunk, Vector2 coords, Random random) { Flora item = noise == null ? layer.get(random) : layer.get(noise, (chunk.getX() << 4) + coords.getX(), (chunk.getZ() << 4) + coords.getZ()); item.getValidSpawnsAt(chunk, (int) coords.getX(), (int) coords.getZ(), level).forEach(block -> item.plant(block.getLocation())); diff --git a/src/main/java/com/dfsek/terra/generation/items/flora/TerraFlora.java b/src/main/java/com/dfsek/terra/generation/items/flora/TerraFlora.java index 2ee756d69..936e320c5 100644 --- a/src/main/java/com/dfsek/terra/generation/items/flora/TerraFlora.java +++ b/src/main/java/com/dfsek/terra/generation/items/flora/TerraFlora.java @@ -1,22 +1,22 @@ package com.dfsek.terra.generation.items.flora; -import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; import com.dfsek.terra.api.gaea.math.Range; import com.dfsek.terra.api.gaea.util.FastRandom; import com.dfsek.terra.api.gaea.util.GlueList; import com.dfsek.terra.api.gaea.world.Flora; import com.dfsek.terra.api.gaea.world.palette.Palette; +import com.dfsek.terra.api.generic.TerraPlugin; +import com.dfsek.terra.api.generic.world.Chunk; import com.dfsek.terra.api.generic.world.WorldHandle; +import com.dfsek.terra.api.generic.world.block.Block; +import com.dfsek.terra.api.generic.world.block.BlockData; +import com.dfsek.terra.api.generic.world.block.BlockFace; +import com.dfsek.terra.api.generic.world.block.data.Directional; +import com.dfsek.terra.api.generic.world.block.data.MultipleFacing; +import com.dfsek.terra.api.generic.world.block.data.Rotatable; +import com.dfsek.terra.api.generic.world.vector.Location; import com.dfsek.terra.util.MaterialSet; import net.jafama.FastMath; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.data.BlockData; -import org.bukkit.block.data.Directional; -import org.bukkit.block.data.MultipleFacing; -import org.bukkit.block.data.Rotatable; import java.util.ArrayList; import java.util.List; @@ -41,9 +41,9 @@ public class TerraFlora implements Flora { private final int irrigableOffset; - private final TerraBukkitPlugin main; + 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, TerraBukkitPlugin 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/src/main/java/com/dfsek/terra/generation/items/ores/DeformedSphereOre.java b/src/main/java/com/dfsek/terra/generation/items/ores/DeformedSphereOre.java index d014693a5..b02cea6d3 100644 --- a/src/main/java/com/dfsek/terra/generation/items/ores/DeformedSphereOre.java +++ b/src/main/java/com/dfsek/terra/generation/items/ores/DeformedSphereOre.java @@ -1,14 +1,14 @@ package com.dfsek.terra.generation.items.ores; -import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; import com.dfsek.terra.api.gaea.math.FastNoiseLite; import com.dfsek.terra.api.gaea.math.Range; +import com.dfsek.terra.api.generic.TerraPlugin; +import com.dfsek.terra.api.generic.world.Chunk; import com.dfsek.terra.api.generic.world.WorldHandle; +import com.dfsek.terra.api.generic.world.block.Block; +import com.dfsek.terra.api.generic.world.block.BlockData; +import com.dfsek.terra.api.generic.world.vector.Vector3; import com.dfsek.terra.util.MaterialSet; -import org.bukkit.Chunk; -import org.bukkit.block.Block; -import org.bukkit.block.data.BlockData; -import org.bukkit.util.Vector; import java.util.Random; @@ -17,7 +17,7 @@ public class DeformedSphereOre extends Ore { private final double deformFrequency; private final Range size; - public DeformedSphereOre(BlockData material, MaterialSet replaceable, boolean applyGravity, double deform, double deformFrequency, Range size, TerraBukkitPlugin main) { + public DeformedSphereOre(BlockData material, MaterialSet replaceable, boolean applyGravity, double deform, double deformFrequency, Range size, TerraPlugin main) { super(material, replaceable, applyGravity, main); this.deform = deform; this.deformFrequency = deformFrequency; @@ -26,7 +26,7 @@ public class DeformedSphereOre extends Ore { @Override - public void generate(Vector origin, Chunk c, Random r) { + public void generate(Vector3 origin, Chunk c, Random r) { WorldHandle handle = main.getHandle(); FastNoiseLite ore = new FastNoiseLite(r.nextInt()); ore.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2); @@ -35,7 +35,7 @@ public class DeformedSphereOre extends Ore { for(int x = -rad; x <= rad; x++) { for(int y = -rad; y <= rad; y++) { for(int z = -rad; z <= rad; z++) { - Vector oreLoc = origin.clone().add(new Vector(x, y, z)); + Vector3 oreLoc = origin.clone().add(new Vector3(x, y, z)); if(oreLoc.getBlockX() > 15 || oreLoc.getBlockZ() > 15 || oreLoc.getBlockY() > 255 || oreLoc.getBlockX() < 0 || oreLoc.getBlockZ() < 0 || oreLoc.getBlockY() < 0) continue; if(oreLoc.distance(origin) < (rad + 0.5) * ((ore.getNoise(x, y, z) + 1) * deform)) { diff --git a/src/main/java/com/dfsek/terra/generation/items/ores/Ore.java b/src/main/java/com/dfsek/terra/generation/items/ores/Ore.java index 0083244ba..1b47852c2 100644 --- a/src/main/java/com/dfsek/terra/generation/items/ores/Ore.java +++ b/src/main/java/com/dfsek/terra/generation/items/ores/Ore.java @@ -1,10 +1,10 @@ package com.dfsek.terra.generation.items.ores; -import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; +import com.dfsek.terra.api.generic.TerraPlugin; +import com.dfsek.terra.api.generic.world.Chunk; +import com.dfsek.terra.api.generic.world.block.BlockData; +import com.dfsek.terra.api.generic.world.vector.Vector3; import com.dfsek.terra.util.MaterialSet; -import org.bukkit.Chunk; -import org.bukkit.block.data.BlockData; -import org.bukkit.util.Vector; import java.util.Random; @@ -13,9 +13,9 @@ public abstract class Ore { private final BlockData material; private final MaterialSet replaceable; private final boolean applyGravity; - protected TerraBukkitPlugin main; + protected TerraPlugin main; - public Ore(BlockData material, MaterialSet replaceable, boolean applyGravity, TerraBukkitPlugin main) { + public Ore(BlockData material, MaterialSet replaceable, boolean applyGravity, TerraPlugin main) { this.material = material; this.replaceable = replaceable; @@ -23,7 +23,7 @@ public abstract class Ore { this.main = main; } - public abstract void generate(Vector origin, Chunk c, Random r); + public abstract void generate(Vector3 origin, Chunk c, Random r); public BlockData getMaterial() { return material; diff --git a/src/main/java/com/dfsek/terra/generation/items/ores/VanillaOre.java b/src/main/java/com/dfsek/terra/generation/items/ores/VanillaOre.java index 0d236570a..c030a8c06 100644 --- a/src/main/java/com/dfsek/terra/generation/items/ores/VanillaOre.java +++ b/src/main/java/com/dfsek/terra/generation/items/ores/VanillaOre.java @@ -1,14 +1,14 @@ package com.dfsek.terra.generation.items.ores; -import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; import com.dfsek.terra.api.gaea.math.Range; +import com.dfsek.terra.api.generic.TerraPlugin; +import com.dfsek.terra.api.generic.world.Chunk; import com.dfsek.terra.api.generic.world.WorldHandle; +import com.dfsek.terra.api.generic.world.block.Block; +import com.dfsek.terra.api.generic.world.block.BlockData; +import com.dfsek.terra.api.generic.world.vector.Vector3; import com.dfsek.terra.util.MaterialSet; import net.jafama.FastMath; -import org.bukkit.Chunk; -import org.bukkit.block.Block; -import org.bukkit.block.data.BlockData; -import org.bukkit.util.Vector; import java.util.Random; @@ -16,13 +16,13 @@ import java.util.Random; public class VanillaOre extends Ore { private final Range sizeRange; - public VanillaOre(BlockData material, MaterialSet replaceable, boolean applyGravity, Range size, TerraBukkitPlugin main) { + public VanillaOre(BlockData material, MaterialSet replaceable, boolean applyGravity, Range size, TerraPlugin main) { super(material, replaceable, applyGravity, main); this.sizeRange = size; } @Override - public void generate(Vector location, Chunk chunk, Random random) { + public void generate(Vector3 location, Chunk chunk, Random random) { WorldHandle handle = main.getHandle(); double size = sizeRange.get(random); diff --git a/src/main/java/com/dfsek/terra/generation/items/tree/TreeLayer.java b/src/main/java/com/dfsek/terra/generation/items/tree/TreeLayer.java index 1c8dd74d7..d247da2ed 100644 --- a/src/main/java/com/dfsek/terra/generation/items/tree/TreeLayer.java +++ b/src/main/java/com/dfsek/terra/generation/items/tree/TreeLayer.java @@ -5,11 +5,11 @@ import com.dfsek.terra.api.gaea.math.ProbabilityCollection; import com.dfsek.terra.api.gaea.math.Range; import com.dfsek.terra.api.gaea.tree.Tree; import com.dfsek.terra.api.gaea.tree.TreeType; +import com.dfsek.terra.api.generic.world.Chunk; +import com.dfsek.terra.api.generic.world.block.Block; +import com.dfsek.terra.api.generic.world.block.BlockFace; import com.dfsek.terra.api.generic.world.vector.Vector2; import com.dfsek.terra.generation.items.PlaceableLayer; -import org.bukkit.Chunk; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import java.util.Random; diff --git a/src/main/java/com/dfsek/terra/population/CavePopulator.java b/src/main/java/com/dfsek/terra/population/CavePopulator.java index ab7040856..531bfa233 100644 --- a/src/main/java/com/dfsek/terra/population/CavePopulator.java +++ b/src/main/java/com/dfsek/terra/population/CavePopulator.java @@ -1,32 +1,20 @@ package com.dfsek.terra.population; -import com.dfsek.terra.TerraWorld; import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; -import com.dfsek.terra.api.gaea.profiler.ProfileFuture; -import com.dfsek.terra.api.generic.world.WorldHandle; -import com.dfsek.terra.carving.UserDefinedCarver; -import com.dfsek.terra.config.base.ConfigPack; -import com.dfsek.terra.config.templates.CarverTemplate; -import com.dfsek.terra.util.PopulationUtil; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.block.data.BlockData; -import org.bukkit.generator.BlockPopulator; +import com.dfsek.terra.api.generic.generator.TerraBlockPopulator; +import com.dfsek.terra.api.generic.world.Chunk; +import com.dfsek.terra.api.generic.world.World; +import com.dfsek.terra.api.generic.world.block.BlockData; +import com.dfsek.terra.api.generic.world.block.MaterialData; import org.jetbrains.annotations.NotNull; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; import java.util.Random; -import java.util.Set; -public class CavePopulator extends BlockPopulator { +public class CavePopulator implements TerraBlockPopulator { private final TerraBukkitPlugin main; - private static final Map shiftStorage = new HashMap<>(); // Persist BlockData created for shifts, to avoid re-calculating each time. - private static final BlockData AIR = Material.AIR.createBlockData(); + private static final Map shiftStorage = new HashMap<>(); // Persist BlockData created for shifts, to avoid re-calculating each time. public CavePopulator(TerraBukkitPlugin main) { this.main = main; @@ -35,6 +23,7 @@ public class CavePopulator extends BlockPopulator { @SuppressWarnings("try") @Override public void populate(@NotNull World world, @NotNull Random r, @NotNull Chunk chunk) { + /* TerraWorld tw = main.getWorld(world); WorldHandle handle = main.getHandle(); try(ProfileFuture ignored = tw.getProfiler().measure("CaveTime")) { @@ -44,11 +33,11 @@ public class CavePopulator extends BlockPopulator { for(UserDefinedCarver c : config.getCarvers()) { CarverTemplate template = c.getConfig(); - Map shiftCandidate = new HashMap<>(); + Map shiftCandidate = new HashMap<>(); Set updateNeeded = new HashSet<>(); c.carve(chunk.getX(), chunk.getZ(), world, (v, type) -> { Block b = chunk.getBlock(v.getBlockX(), v.getBlockY(), v.getBlockZ()); - Material m = handle.getType(b); + MaterialData m = handle.getType(b); switch(type) { case CENTER: if(template.getInner().canReplace(m)) { @@ -101,5 +90,7 @@ public class CavePopulator extends BlockPopulator { } } + + */ } } diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index d75a8d289..c4983771e 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -3,14 +3,14 @@ package com.dfsek.terra.population; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; import com.dfsek.terra.api.gaea.generation.GenerationPhase; -import com.dfsek.terra.api.gaea.population.GaeaBlockPopulator; import com.dfsek.terra.api.gaea.profiler.ProfileFuture; +import com.dfsek.terra.api.generic.generator.TerraBlockPopulator; +import com.dfsek.terra.api.generic.world.Chunk; +import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.api.generic.world.vector.Vector2; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.generation.items.flora.FloraLayer; -import org.bukkit.Chunk; -import org.bukkit.World; import org.jetbrains.annotations.NotNull; import java.util.HashMap; @@ -21,7 +21,7 @@ import java.util.Random; /** * Populates Flora and Trees */ -public class FloraPopulator extends GaeaBlockPopulator { +public class FloraPopulator implements TerraBlockPopulator { private final TerraBukkitPlugin main; public FloraPopulator(TerraBukkitPlugin main) { diff --git a/src/main/java/com/dfsek/terra/population/OrePopulator.java b/src/main/java/com/dfsek/terra/population/OrePopulator.java index da112186f..448179abf 100644 --- a/src/main/java/com/dfsek/terra/population/OrePopulator.java +++ b/src/main/java/com/dfsek/terra/population/OrePopulator.java @@ -5,19 +5,19 @@ import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; import com.dfsek.terra.api.gaea.biome.Biome; import com.dfsek.terra.api.gaea.generation.GenerationPhase; import com.dfsek.terra.api.gaea.math.MathUtil; -import com.dfsek.terra.api.gaea.population.GaeaBlockPopulator; import com.dfsek.terra.api.gaea.profiler.ProfileFuture; import com.dfsek.terra.api.gaea.util.FastRandom; +import com.dfsek.terra.api.generic.generator.TerraBlockPopulator; +import com.dfsek.terra.api.generic.world.Chunk; +import com.dfsek.terra.api.generic.world.World; +import com.dfsek.terra.api.generic.world.vector.Vector3; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.templates.BiomeTemplate; -import org.bukkit.Chunk; -import org.bukkit.World; -import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; import java.util.Random; -public class OrePopulator extends GaeaBlockPopulator { +public class OrePopulator implements TerraBlockPopulator { private final TerraBukkitPlugin main; public OrePopulator(TerraBukkitPlugin main) { @@ -42,7 +42,7 @@ public class OrePopulator extends GaeaBlockPopulator { config.getOreHolder().forEach((ore, oreConfig) -> { int amount = oreConfig.getAmount().get(random); for(int i = 0; i < amount; i++) { - Vector location = new Vector(random.nextInt(16) + 16 * finalCx, oreConfig.getHeight().get(random), random.nextInt(16) + 16 * finalCz); + Vector3 location = new Vector3(random.nextInt(16) + 16 * finalCx, oreConfig.getHeight().get(random), random.nextInt(16) + 16 * finalCz); ore.generate(location, chunk, random); } }); diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index ebe45f5c4..59774fd36 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -1,33 +1,14 @@ package com.dfsek.terra.population; -import com.dfsek.terra.TerraWorld; import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; -import com.dfsek.terra.api.gaea.profiler.ProfileFuture; -import com.dfsek.terra.api.gaea.structures.loot.LootTable; -import com.dfsek.terra.api.gaea.util.FastRandom; -import com.dfsek.terra.api.generic.world.vector.Vector2; -import com.dfsek.terra.biome.UserDefinedBiome; -import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; -import com.dfsek.terra.config.base.ConfigPack; -import com.dfsek.terra.debug.Debug; -import com.dfsek.terra.generation.items.TerraStructure; -import com.dfsek.terra.structure.Rotation; -import com.dfsek.terra.structure.Structure; -import com.dfsek.terra.structure.StructureContainedInventory; -import com.dfsek.terra.structure.features.Feature; -import com.dfsek.terra.util.PopulationUtil; -import com.dfsek.terra.util.structure.RotationUtil; -import net.jafama.FastMath; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.generator.BlockPopulator; -import org.bukkit.inventory.BlockInventoryHolder; +import com.dfsek.terra.api.generic.generator.TerraBlockPopulator; +import com.dfsek.terra.api.generic.world.Chunk; +import com.dfsek.terra.api.generic.world.World; import org.jetbrains.annotations.NotNull; import java.util.Random; -public class StructurePopulator extends BlockPopulator { +public class StructurePopulator implements TerraBlockPopulator { private final TerraBukkitPlugin main; public StructurePopulator(TerraBukkitPlugin main) { @@ -37,6 +18,7 @@ public class StructurePopulator extends BlockPopulator { @SuppressWarnings("try") @Override public void populate(@NotNull World world, @NotNull Random r, @NotNull Chunk chunk) { + /* TerraWorld tw = main.getWorld(world); try(ProfileFuture ignored = tw.getProfiler().measure("StructureTime")) { Random random = PopulationUtil.getRandom(chunk); @@ -80,5 +62,7 @@ public class StructurePopulator extends BlockPopulator { } } } + + */ } } diff --git a/src/main/java/com/dfsek/terra/population/TreePopulator.java b/src/main/java/com/dfsek/terra/population/TreePopulator.java index 674954326..66899a162 100644 --- a/src/main/java/com/dfsek/terra/population/TreePopulator.java +++ b/src/main/java/com/dfsek/terra/population/TreePopulator.java @@ -3,21 +3,21 @@ package com.dfsek.terra.population; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; import com.dfsek.terra.api.gaea.generation.GenerationPhase; -import com.dfsek.terra.api.gaea.population.GaeaBlockPopulator; import com.dfsek.terra.api.gaea.profiler.ProfileFuture; +import com.dfsek.terra.api.generic.generator.TerraBlockPopulator; +import com.dfsek.terra.api.generic.world.Chunk; +import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.api.generic.world.vector.Vector2; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.generation.items.tree.TreeLayer; import net.jafama.FastMath; -import org.bukkit.Chunk; -import org.bukkit.World; import org.jetbrains.annotations.NotNull; import java.util.Random; -public class TreePopulator extends GaeaBlockPopulator { +public class TreePopulator implements TerraBlockPopulator { private final TerraBukkitPlugin main; public TreePopulator(TerraBukkitPlugin main) { diff --git a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java index 8fc7ddcb8..753310128 100644 --- a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java +++ b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java @@ -3,7 +3,7 @@ package com.dfsek.terra.procgen; import com.dfsek.terra.api.gaea.math.MathUtil; import com.dfsek.terra.api.gaea.util.FastRandom; import com.dfsek.terra.api.gaea.util.GlueList; -import org.bukkit.util.Vector; +import com.dfsek.terra.api.generic.world.vector.Vector3; import java.util.List; import java.util.Random; @@ -30,18 +30,18 @@ public class GridSpawn { * @param seed Seed for RNG * @return Vector representing nearest spawnpoint */ - public Vector getNearestSpawn(int x, int z, long seed) { + public Vector3 getNearestSpawn(int x, int z, long seed) { int structureChunkX = x / (width + 2 * separation); int structureChunkZ = z / (width + 2 * separation); - List zones = new GlueList<>(); + List zones = new GlueList<>(); for(int xi = structureChunkX - 1; xi <= structureChunkX + 1; xi++) { for(int zi = structureChunkZ - 1; zi <= structureChunkZ + 1; zi++) { zones.add(getChunkSpawn(xi, zi, seed + seedOffset)); } } - Vector shortest = zones.get(0); - Vector compare = new Vector(x, 0, z); - for(Vector v : zones) { + Vector3 shortest = zones.get(0); + Vector3 compare = new Vector3(x, 0, z); + for(Vector3 v : zones) { if(compare.distanceSquared(shortest) > compare.distanceSquared(v)) shortest = v.clone(); } return shortest; @@ -55,13 +55,13 @@ public class GridSpawn { * @param seed Seed for RNG * @return Vector representing spawnpoint */ - public Vector getChunkSpawn(int structureChunkX, int structureChunkZ, long seed) { + public Vector3 getChunkSpawn(int structureChunkX, int structureChunkZ, long seed) { Random r = new FastRandom(MathUtil.getCarverChunkSeed(structureChunkX, structureChunkZ, seed + seedOffset)); int offsetX = r.nextInt(width); int offsetZ = r.nextInt(width); int sx = structureChunkX * (width + 2 * separation) + offsetX; int sz = structureChunkZ * (width + 2 * separation) + offsetZ; - return new Vector(sx, 0, sz); + return new Vector3(sx, 0, sz); } public int getWidth() { diff --git a/src/main/java/com/dfsek/terra/structure/Structure.java b/src/main/java/com/dfsek/terra/structure/Structure.java index 0535377f6..876473a48 100644 --- a/src/main/java/com/dfsek/terra/structure/Structure.java +++ b/src/main/java/com/dfsek/terra/structure/Structure.java @@ -3,20 +3,11 @@ package com.dfsek.terra.structure; import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; import com.dfsek.terra.api.gaea.math.Range; import com.dfsek.terra.api.generic.world.WorldHandle; +import com.dfsek.terra.api.generic.world.vector.Location; import com.dfsek.terra.api.generic.world.vector.Vector2; import com.dfsek.terra.debug.Debug; -import com.dfsek.terra.util.structure.RotationUtil; import net.jafama.FastMath; -import org.bukkit.Bukkit; import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.BlockState; -import org.bukkit.block.Sign; -import org.bukkit.block.data.BlockData; -import org.bukkit.inventory.BlockInventoryHolder; import org.jetbrains.annotations.NotNull; import java.io.File; @@ -28,7 +19,6 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.HashSet; -import java.util.Objects; import java.util.UUID; import java.util.function.Consumer; @@ -53,6 +43,7 @@ public class Structure implements Serializable { if(l1.getX() > l2.getX() || l1.getY() > l2.getY() || l1.getZ() > l2.getZ()) throw new IllegalArgumentException("Invalid locations provided!"); structure = new StructureContainedBlock[l2.getBlockX() - l1.getBlockX() + 1][l2.getBlockZ() - l1.getBlockZ() + 1][l2.getBlockY() - l1.getBlockY() + 1]; + /* for(int x = 0; x <= l2.getBlockX() - l1.getBlockX(); x++) { for(int z = 0; z <= l2.getBlockZ() - l1.getBlockZ(); z++) { for(int y = 0; y <= l2.getBlockY() - l1.getBlockY(); y++) { @@ -110,6 +101,8 @@ public class Structure implements Serializable { } } } + + */ if(centerX < 0 || centerZ < 0) throw new InitializationException("No structure center specified.", null); structureInfo = new StructureInfo(l2.getBlockX() - l1.getBlockX() + 1, l2.getBlockY() - l1.getBlockY() + 1, l2.getBlockZ() - l1.getBlockZ() + 1, new Vector2(centerX, centerZ)); } @@ -177,6 +170,7 @@ public class Structure implements Serializable { * @param r The rotation of the structure */ private void pasteBlock(StructureContainedBlock block, Location origin, Rotation r, WorldHandle handle) { + /* BlockData data = block.getBlockData().clone(); if(!data.getMaterial().equals(Material.STRUCTURE_VOID)) { @@ -209,6 +203,8 @@ public class Structure implements Serializable { block.getState().getState(worldBlock.getState()).update(true, false); } } + + */ } /** @@ -287,12 +283,16 @@ public class Structure implements Serializable { } public boolean checkSpawns(Location origin, Rotation r, TerraBukkitPlugin main) { + /* for(StructureContainedBlock b : spawns) { Vector2 rot = getRotatedCoords(new Vector2(b.getX() - structureInfo.getCenterX(), b.getZ() - structureInfo.getCenterZ()), r); if(!b.getRequirement().getInstance(origin.getWorld(), main).matches((int) rot.getX() + origin.getBlockX(), origin.getBlockY() + b.getY(), (int) rot.getZ() + origin.getBlockZ())) return false; } - return true; + return true; + + */ + return false; } public HashSet getSpawns() { diff --git a/src/main/java/com/dfsek/terra/structure/StructureSpawnRequirement.java b/src/main/java/com/dfsek/terra/structure/StructureSpawnRequirement.java index b7d793ca3..5cc2c496f 100644 --- a/src/main/java/com/dfsek/terra/structure/StructureSpawnRequirement.java +++ b/src/main/java/com/dfsek/terra/structure/StructureSpawnRequirement.java @@ -1,12 +1,12 @@ package com.dfsek.terra.structure; import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; +import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.structure.spawn.AirSpawn; import com.dfsek.terra.structure.spawn.BlankSpawn; import com.dfsek.terra.structure.spawn.LandSpawn; import com.dfsek.terra.structure.spawn.OceanSpawn; import com.dfsek.terra.structure.spawn.Requirement; -import org.bukkit.World; import java.io.Serializable; diff --git a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java index e60165913..c21512609 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java @@ -3,10 +3,10 @@ package com.dfsek.terra.structure.spawn; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; import com.dfsek.terra.api.gaea.generation.GenerationPhase; +import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.generation.config.WorldGenerator; -import org.bukkit.World; public class AirSpawn extends Requirement { public AirSpawn(World world, TerraBukkitPlugin main) { @@ -20,6 +20,6 @@ public class AirSpawn extends Requirement { BiomeTemplate c = b.getConfig(); if(y <= c.getSeaLevel()) return false; double elevation = ((WorldGenerator) b.getGenerator()).getElevation(x, z); - return b.getGenerator().getNoise(getNoise(), world, x, y, z) + elevation <= 0; + return b.getGenerator().getNoise(world, x, y, z) + elevation <= 0; } } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java index 69d5346de..f12f8509d 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java @@ -3,9 +3,9 @@ package com.dfsek.terra.structure.spawn; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; import com.dfsek.terra.api.gaea.generation.GenerationPhase; +import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.generation.config.WorldGenerator; -import org.bukkit.World; public class LandSpawn extends Requirement { public LandSpawn(World world, TerraBukkitPlugin main) { @@ -17,6 +17,6 @@ public class LandSpawn extends Requirement { TerraWorld tw = main.getWorld(world); UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); double elevation = ((WorldGenerator) b.getGenerator()).getElevation(x, z); - return b.getGenerator().getNoise(getNoise(), world, x, y, z) + elevation > 0; + return b.getGenerator().getNoise(world, x, y, z) + elevation > 0; } } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java index 19a65087a..27f6622a6 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java @@ -3,10 +3,10 @@ package com.dfsek.terra.structure.spawn; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; import com.dfsek.terra.api.gaea.generation.GenerationPhase; +import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.generation.config.WorldGenerator; -import org.bukkit.World; public class OceanSpawn extends Requirement { public OceanSpawn(World world, TerraBukkitPlugin main) { @@ -20,6 +20,6 @@ public class OceanSpawn extends Requirement { BiomeTemplate c = b.getConfig(); if(y > c.getSeaLevel()) return false; double elevation = ((WorldGenerator) b.getGenerator()).getElevation(x, z); - return b.getGenerator().getNoise(getNoise(), world, x, y, z) + elevation <= 0; + return b.getGenerator().getNoise(world, x, y, z) + elevation <= 0; } } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/Requirement.java b/src/main/java/com/dfsek/terra/structure/spawn/Requirement.java index acdccf78f..a0ac0113f 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/Requirement.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/Requirement.java @@ -1,10 +1,7 @@ package com.dfsek.terra.structure.spawn; import com.dfsek.terra.api.bukkit.TerraBukkitPlugin; -import com.dfsek.terra.api.gaea.math.FastNoiseLite; -import org.bukkit.World; - -import java.util.Objects; +import com.dfsek.terra.api.generic.world.World; public abstract class Requirement { protected final World world; @@ -17,9 +14,6 @@ public abstract class Requirement { public abstract boolean matches(int x, int y, int z); - protected FastNoiseLite getNoise() { - return ((TerraChunkGenerator) Objects.requireNonNull(world.getGenerator())).getNoiseGenerator(); - } public World getWorld() { return world; diff --git a/src/main/java/com/dfsek/terra/util/MaterialSet.java b/src/main/java/com/dfsek/terra/util/MaterialSet.java index e60321207..b3008a8ce 100644 --- a/src/main/java/com/dfsek/terra/util/MaterialSet.java +++ b/src/main/java/com/dfsek/terra/util/MaterialSet.java @@ -1,21 +1,21 @@ package com.dfsek.terra.util; -import org.bukkit.Material; -import org.bukkit.block.data.BlockData; +import com.dfsek.terra.api.generic.world.block.BlockData; +import com.dfsek.terra.api.generic.world.block.MaterialData; import java.util.Arrays; import java.util.HashSet; -public class MaterialSet extends HashSet { +public class MaterialSet extends HashSet { private static final long serialVersionUID = 3056512763631017301L; - public static MaterialSet singleton(Material material) { + public static MaterialSet singleton(MaterialData material) { MaterialSet set = new MaterialSet(); set.add(material); return set; } - public static MaterialSet get(Material... materials) { + public static MaterialSet get(MaterialData... materials) { MaterialSet set = new MaterialSet(); set.addAll(Arrays.asList(materials)); return set; diff --git a/src/main/java/com/dfsek/terra/util/SlabUtil.java b/src/main/java/com/dfsek/terra/util/SlabUtil.java index b9ca5f9ef..ac036504a 100644 --- a/src/main/java/com/dfsek/terra/util/SlabUtil.java +++ b/src/main/java/com/dfsek/terra/util/SlabUtil.java @@ -21,8 +21,8 @@ public final class SlabUtil { if(stairs != null) { Palette stairPalette = stairs.get(down.getMaterial()); if(stairPalette != null) { - BlockData stair = stairPalette.get(0, block.getBlockX(), block.getBlockZ()); - Stairs stairNew = (Stairs) stair.clone(); + BlockData stair = stairPalette.get(0, block.getBlockX(), block.getBlockZ()).clone(); + Stairs stairNew = (Stairs) stair; if(placeStair(orig, chunk, block, thresh, sampler, stairNew)) return; // Successfully placed part. } } diff --git a/src/main/java/com/dfsek/terra/util/TagUtil.java b/src/main/java/com/dfsek/terra/util/TagUtil.java index 375d014a9..e05cb67e7 100644 --- a/src/main/java/com/dfsek/terra/util/TagUtil.java +++ b/src/main/java/com/dfsek/terra/util/TagUtil.java @@ -1,14 +1,10 @@ package com.dfsek.terra.util; +import com.dfsek.terra.api.generic.world.block.MaterialData; import com.dfsek.terra.debug.Debug; -import org.bukkit.Material; -import org.bukkit.Tag; import org.jetbrains.annotations.NotNull; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; import java.util.Objects; import java.util.Set; @@ -17,12 +13,13 @@ import java.util.stream.Stream; @SuppressWarnings("unchecked") public final class TagUtil { - private static final Map> tagMap; + private static final Map> tagMap; static { Debug.info("Loading tags..."); tagMap = new HashMap<>(); + /* Field[] tags = Tag.class.getFields(); // Add Bukkit tags for(Field field : tags) { if(Modifier.isStatic(field.getModifiers())) { @@ -61,18 +58,20 @@ public final class TagUtil { Debug.info("Added " + snow.size() + " materials to snow blacklist"); Debug.info("Added " + solid.size() + " materials to solid list"); Debug.info("Loaded " + tagMap.size() + " tags."); + + */ } - private static Set getSet(Material... materials) { + private static Set getSet(MaterialData... materials) { return Stream.of(materials).collect(Collectors.toSet()); } - private static void putCustomSet(String key, Material... materials) { + private static void putCustomSet(String key, MaterialData... materials) { tagMap.put(key, getSet(materials)); } @NotNull - public static Set getTag(String tag) { + public static Set getTag(String tag) { return Objects.requireNonNull(tagMap.get(tag)); } }