From 392ba59741454d3d411fbaa7079787e4935279a8 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 10 Dec 2020 10:19:16 -0700 Subject: [PATCH] Begin reimplementing agnostic versions of Bukkit classes with delegate implementations --- .../dfsek/terra/api/bukkit/BukkitChunk.java | 21 ++++ .../dfsek/terra/api/bukkit/BukkitWorld.java | 16 +++ .../api/generic/generator/BlockPopulator.java | 10 ++ .../api/generic/generator/ChunkGenerator.java | 4 + .../dfsek/terra/api/generic/world/Block.java | 4 + .../dfsek/terra/api/generic/world/Chunk.java | 7 ++ .../dfsek/terra/api/generic/world/World.java | 5 + .../api/generic/world/vector/Location.java | 27 +++++ .../generic/world/vector}/Vector2.java | 2 +- .../api/generic/world/vector/Vector3.java | 104 ++++++++++++++++++ .../grid/master/TerraRadialBiomeGrid.java | 2 +- .../grid/master/TerraStandardBiomeGrid.java | 2 +- .../postprocessing/CoordinatePerturb.java | 2 +- .../generation/items/PlaceableLayer.java | 2 +- .../generation/items/flora/FloraLayer.java | 2 +- .../generation/items/tree/TerraTree.java | 2 +- .../generation/items/tree/TreeLayer.java | 2 +- .../dfsek/terra/population/CavePopulator.java | 5 - .../terra/population/FloraPopulator.java | 2 +- .../terra/population/StructurePopulator.java | 2 +- .../dfsek/terra/population/TreePopulator.java | 2 +- .../dfsek/terra/procgen/pixel/Polygon.java | 2 +- .../dfsek/terra/procgen/pixel/Rectangle.java | 2 +- .../com/dfsek/terra/structure/Structure.java | 2 +- .../dfsek/terra/structure/StructureInfo.java | 2 +- .../terra/util/structure/RotationUtil.java | 2 +- 26 files changed, 214 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/dfsek/terra/api/bukkit/BukkitChunk.java create mode 100644 src/main/java/com/dfsek/terra/api/bukkit/BukkitWorld.java create mode 100644 src/main/java/com/dfsek/terra/api/generic/generator/BlockPopulator.java create mode 100644 src/main/java/com/dfsek/terra/api/generic/generator/ChunkGenerator.java create mode 100644 src/main/java/com/dfsek/terra/api/generic/world/Block.java create mode 100644 src/main/java/com/dfsek/terra/api/generic/world/Chunk.java create mode 100644 src/main/java/com/dfsek/terra/api/generic/world/World.java create mode 100644 src/main/java/com/dfsek/terra/api/generic/world/vector/Location.java rename src/main/java/com/dfsek/terra/{procgen/math => api/generic/world/vector}/Vector2.java (98%) create mode 100644 src/main/java/com/dfsek/terra/api/generic/world/vector/Vector3.java diff --git a/src/main/java/com/dfsek/terra/api/bukkit/BukkitChunk.java b/src/main/java/com/dfsek/terra/api/bukkit/BukkitChunk.java new file mode 100644 index 000000000..269d27707 --- /dev/null +++ b/src/main/java/com/dfsek/terra/api/bukkit/BukkitChunk.java @@ -0,0 +1,21 @@ +package com.dfsek.terra.api.bukkit; + +import com.dfsek.terra.api.generic.world.Chunk; + +public class BukkitChunk implements Chunk { + private final org.bukkit.Chunk delegate; + + public BukkitChunk(org.bukkit.Chunk delegate) { + this.delegate = delegate; + } + + @Override + public int getX() { + return delegate.getX(); + } + + @Override + public int getZ() { + return delegate.getZ(); + } +} diff --git a/src/main/java/com/dfsek/terra/api/bukkit/BukkitWorld.java b/src/main/java/com/dfsek/terra/api/bukkit/BukkitWorld.java new file mode 100644 index 000000000..94e3ae4c3 --- /dev/null +++ b/src/main/java/com/dfsek/terra/api/bukkit/BukkitWorld.java @@ -0,0 +1,16 @@ +package com.dfsek.terra.api.bukkit; + +import com.dfsek.terra.api.generic.world.World; + +public class BukkitWorld implements World { + private final org.bukkit.World delegate; + + public BukkitWorld(org.bukkit.World delegate) { + this.delegate = delegate; + } + + @Override + public long getSeed() { + return delegate.getSeed(); + } +} diff --git a/src/main/java/com/dfsek/terra/api/generic/generator/BlockPopulator.java b/src/main/java/com/dfsek/terra/api/generic/generator/BlockPopulator.java new file mode 100644 index 000000000..a205ff579 --- /dev/null +++ b/src/main/java/com/dfsek/terra/api/generic/generator/BlockPopulator.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 abstract class BlockPopulator { + public abstract void populate(World world, Random random, Chunk chunk); +} diff --git a/src/main/java/com/dfsek/terra/api/generic/generator/ChunkGenerator.java b/src/main/java/com/dfsek/terra/api/generic/generator/ChunkGenerator.java new file mode 100644 index 000000000..4ad035b34 --- /dev/null +++ b/src/main/java/com/dfsek/terra/api/generic/generator/ChunkGenerator.java @@ -0,0 +1,4 @@ +package com.dfsek.terra.api.generic.generator; + +public abstract class ChunkGenerator { +} diff --git a/src/main/java/com/dfsek/terra/api/generic/world/Block.java b/src/main/java/com/dfsek/terra/api/generic/world/Block.java new file mode 100644 index 000000000..e3ec7fe64 --- /dev/null +++ b/src/main/java/com/dfsek/terra/api/generic/world/Block.java @@ -0,0 +1,4 @@ +package com.dfsek.terra.api.generic.world; + +public interface Block { +} 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 new file mode 100644 index 000000000..1c8370131 --- /dev/null +++ b/src/main/java/com/dfsek/terra/api/generic/world/Chunk.java @@ -0,0 +1,7 @@ +package com.dfsek.terra.api.generic.world; + +public interface Chunk { + int getX(); + + int getZ(); +} 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 new file mode 100644 index 000000000..2b834ce54 --- /dev/null +++ b/src/main/java/com/dfsek/terra/api/generic/world/World.java @@ -0,0 +1,5 @@ +package com.dfsek.terra.api.generic.world; + +public interface World { + long getSeed(); +} 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 new file mode 100644 index 000000000..7c82c96f4 --- /dev/null +++ b/src/main/java/com/dfsek/terra/api/generic/world/vector/Location.java @@ -0,0 +1,27 @@ +package com.dfsek.terra.api.generic.world.vector; + +import com.dfsek.terra.api.generic.world.World; + +public class Location implements Cloneable { + private final World world; + private final Vector3 vector; + + public Location(World w, double x, double y, double z) { + this.world = w; + this.vector = new Vector3(x, y, z); + } + + public Location(World w, Vector3 vector) { + this.world = w; + this.vector = vector; + } + + @Override + public Location clone() { + try { + return (Location) super.clone(); + } catch(CloneNotSupportedException e) { + throw new Error(e); + } + } +} diff --git a/src/main/java/com/dfsek/terra/procgen/math/Vector2.java b/src/main/java/com/dfsek/terra/api/generic/world/vector/Vector2.java similarity index 98% rename from src/main/java/com/dfsek/terra/procgen/math/Vector2.java rename to src/main/java/com/dfsek/terra/api/generic/world/vector/Vector2.java index 6ec295b17..f98c2fb7a 100644 --- a/src/main/java/com/dfsek/terra/procgen/math/Vector2.java +++ b/src/main/java/com/dfsek/terra/api/generic/world/vector/Vector2.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.procgen.math; +package com.dfsek.terra.api.generic.world.vector; import net.jafama.FastMath; diff --git a/src/main/java/com/dfsek/terra/api/generic/world/vector/Vector3.java b/src/main/java/com/dfsek/terra/api/generic/world/vector/Vector3.java new file mode 100644 index 000000000..48e38ebec --- /dev/null +++ b/src/main/java/com/dfsek/terra/api/generic/world/vector/Vector3.java @@ -0,0 +1,104 @@ +package com.dfsek.terra.api.generic.world.vector; + +import com.dfsek.terra.api.generic.world.World; +import net.jafama.FastMath; + +public class Vector3 implements Cloneable { + private double x; + private double y; + private double z; + + public Vector3(double x, double y, double z) { + this.x = x; + this.y = y; + this.z = z; + } + + public double getZ() { + return z; + } + + public Vector3 setZ(double z) { + this.z = z; + return this; + } + + public double getX() { + return x; + } + + public Vector3 setX(double x) { + this.x = x; + return this; + } + + public double getY() { + return y; + } + + public Vector3 setY(double y) { + this.y = y; + return this; + } + + public int getBlockX() { + return FastMath.floorToInt(x); + } + + public int getBlockY() { + return FastMath.floorToInt(y); + } + + public int getBlockZ() { + return FastMath.floorToInt(z); + } + + public Vector3 multiply(int m) { + x *= m; + y *= m; + z *= m; + return this; + } + + public Vector3 add(double x, double y, double z) { + this.x += x; + this.y += y; + this.z += z; + return this; + } + + public Vector3 add(Vector3 other) { + this.x += other.getX(); + this.y += other.getY(); + this.z += other.getZ(); + return this; + } + + public Vector3 add(Vector2 other) { + this.x += other.getX(); + this.z += other.getZ(); + return this; + } + + public double lengthSq() { + return x * x + y * y + z * z; + } + + public double length() { + return FastMath.sqrt(lengthSq()); + } + + @Override + public Vector3 clone() { + try { + return (Vector3) super.clone(); + } catch(CloneNotSupportedException e) { + throw new Error(e); + } + } + + public Location toLocation(World world) { + return new Location(world, this.clone()); + } + +} diff --git a/src/main/java/com/dfsek/terra/biome/grid/master/TerraRadialBiomeGrid.java b/src/main/java/com/dfsek/terra/biome/grid/master/TerraRadialBiomeGrid.java index 85fbc414a..8d23c72c0 100644 --- a/src/main/java/com/dfsek/terra/biome/grid/master/TerraRadialBiomeGrid.java +++ b/src/main/java/com/dfsek/terra/biome/grid/master/TerraRadialBiomeGrid.java @@ -1,5 +1,6 @@ package com.dfsek.terra.biome.grid.master; +import com.dfsek.terra.api.generic.world.vector.Vector2; import com.dfsek.terra.biome.BiomeZone; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.grid.UserDefinedGrid; @@ -7,7 +8,6 @@ import com.dfsek.terra.biome.postprocessing.CoordinatePerturb; import com.dfsek.terra.biome.postprocessing.ErosionNoise; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigPackTemplate; -import com.dfsek.terra.procgen.math.Vector2; import net.jafama.FastMath; import org.bukkit.Location; import org.bukkit.World; diff --git a/src/main/java/com/dfsek/terra/biome/grid/master/TerraStandardBiomeGrid.java b/src/main/java/com/dfsek/terra/biome/grid/master/TerraStandardBiomeGrid.java index 3ade9babf..9c82b4e02 100644 --- a/src/main/java/com/dfsek/terra/biome/grid/master/TerraStandardBiomeGrid.java +++ b/src/main/java/com/dfsek/terra/biome/grid/master/TerraStandardBiomeGrid.java @@ -1,5 +1,6 @@ package com.dfsek.terra.biome.grid.master; +import com.dfsek.terra.api.generic.world.vector.Vector2; import com.dfsek.terra.biome.BiomeZone; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.grid.UserDefinedGrid; @@ -7,7 +8,6 @@ import com.dfsek.terra.biome.postprocessing.CoordinatePerturb; import com.dfsek.terra.biome.postprocessing.ErosionNoise; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigPackTemplate; -import com.dfsek.terra.procgen.math.Vector2; import org.bukkit.Location; import org.bukkit.World; import org.polydev.gaea.biome.Biome; diff --git a/src/main/java/com/dfsek/terra/biome/postprocessing/CoordinatePerturb.java b/src/main/java/com/dfsek/terra/biome/postprocessing/CoordinatePerturb.java index 334caefea..ce1ecdcd4 100644 --- a/src/main/java/com/dfsek/terra/biome/postprocessing/CoordinatePerturb.java +++ b/src/main/java/com/dfsek/terra/biome/postprocessing/CoordinatePerturb.java @@ -1,6 +1,6 @@ package com.dfsek.terra.biome.postprocessing; -import com.dfsek.terra.procgen.math.Vector2; +import com.dfsek.terra.api.generic.world.vector.Vector2; import org.polydev.gaea.math.FastNoiseLite; /** 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 f688b63b1..3285fa71c 100644 --- a/src/main/java/com/dfsek/terra/generation/items/PlaceableLayer.java +++ b/src/main/java/com/dfsek/terra/generation/items/PlaceableLayer.java @@ -1,6 +1,6 @@ package com.dfsek.terra.generation.items; -import com.dfsek.terra.procgen.math.Vector2; +import com.dfsek.terra.api.generic.world.vector.Vector2; import org.bukkit.Chunk; import org.polydev.gaea.math.FastNoiseLite; import org.polydev.gaea.math.ProbabilityCollection; 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 2f8198000..29d2f462f 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 @@ -1,7 +1,7 @@ package com.dfsek.terra.generation.items.flora; +import com.dfsek.terra.api.generic.world.vector.Vector2; import com.dfsek.terra.generation.items.PlaceableLayer; -import com.dfsek.terra.procgen.math.Vector2; import org.bukkit.Chunk; import org.polydev.gaea.math.FastNoiseLite; import org.polydev.gaea.math.ProbabilityCollection; diff --git a/src/main/java/com/dfsek/terra/generation/items/tree/TerraTree.java b/src/main/java/com/dfsek/terra/generation/items/tree/TerraTree.java index 54dfe5829..615510842 100644 --- a/src/main/java/com/dfsek/terra/generation/items/tree/TerraTree.java +++ b/src/main/java/com/dfsek/terra/generation/items/tree/TerraTree.java @@ -1,7 +1,7 @@ package com.dfsek.terra.generation.items.tree; import com.dfsek.terra.Terra; -import com.dfsek.terra.procgen.math.Vector2; +import com.dfsek.terra.api.generic.world.vector.Vector2; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureContainedBlock; 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 bcc24f7c6..75edd2672 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 @@ -1,7 +1,7 @@ package com.dfsek.terra.generation.items.tree; +import com.dfsek.terra.api.generic.world.vector.Vector2; import com.dfsek.terra.generation.items.PlaceableLayer; -import com.dfsek.terra.procgen.math.Vector2; import org.bukkit.Chunk; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; diff --git a/src/main/java/com/dfsek/terra/population/CavePopulator.java b/src/main/java/com/dfsek/terra/population/CavePopulator.java index cae23efbc..9a32c1035 100644 --- a/src/main/java/com/dfsek/terra/population/CavePopulator.java +++ b/src/main/java/com/dfsek/terra/population/CavePopulator.java @@ -12,7 +12,6 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; import org.bukkit.generator.BlockPopulator; import org.jetbrains.annotations.NotNull; @@ -103,8 +102,4 @@ public class CavePopulator extends BlockPopulator { } } - - private boolean borderingOcean(Block b) { - return b.getRelative(BlockFace.UP).getType().equals(Material.WATER) || b.getType().equals(Material.LAVA); - } } diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index 779e7d106..0327d641c 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -2,10 +2,10 @@ package com.dfsek.terra.population; import com.dfsek.terra.Terra; import com.dfsek.terra.TerraWorld; +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 com.dfsek.terra.procgen.math.Vector2; import org.bukkit.Chunk; import org.bukkit.World; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index 7185f7e1e..a08ca9428 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -2,12 +2,12 @@ package com.dfsek.terra.population; import com.dfsek.terra.Terra; import com.dfsek.terra.TerraWorld; +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.procgen.math.Vector2; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureContainedInventory; diff --git a/src/main/java/com/dfsek/terra/population/TreePopulator.java b/src/main/java/com/dfsek/terra/population/TreePopulator.java index b2b2a95fe..f2524eec5 100644 --- a/src/main/java/com/dfsek/terra/population/TreePopulator.java +++ b/src/main/java/com/dfsek/terra/population/TreePopulator.java @@ -2,10 +2,10 @@ package com.dfsek.terra.population; import com.dfsek.terra.Terra; import com.dfsek.terra.TerraWorld; +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 com.dfsek.terra.procgen.math.Vector2; import net.jafama.FastMath; import org.bukkit.Chunk; import org.bukkit.World; diff --git a/src/main/java/com/dfsek/terra/procgen/pixel/Polygon.java b/src/main/java/com/dfsek/terra/procgen/pixel/Polygon.java index fde36b4f0..5988a3295 100644 --- a/src/main/java/com/dfsek/terra/procgen/pixel/Polygon.java +++ b/src/main/java/com/dfsek/terra/procgen/pixel/Polygon.java @@ -1,6 +1,6 @@ package com.dfsek.terra.procgen.pixel; -import com.dfsek.terra.procgen.math.Vector2; +import com.dfsek.terra.api.generic.world.vector.Vector2; import java.util.Set; diff --git a/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java b/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java index fb2df4824..019ddb912 100644 --- a/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java +++ b/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java @@ -1,6 +1,6 @@ package com.dfsek.terra.procgen.pixel; -import com.dfsek.terra.procgen.math.Vector2; +import com.dfsek.terra.api.generic.world.vector.Vector2; import net.jafama.FastMath; import java.util.HashSet; diff --git a/src/main/java/com/dfsek/terra/structure/Structure.java b/src/main/java/com/dfsek/terra/structure/Structure.java index 7b541b19d..d42800441 100644 --- a/src/main/java/com/dfsek/terra/structure/Structure.java +++ b/src/main/java/com/dfsek/terra/structure/Structure.java @@ -2,8 +2,8 @@ package com.dfsek.terra.structure; import com.dfsek.terra.Terra; import com.dfsek.terra.api.generic.world.WorldHandle; +import com.dfsek.terra.api.generic.world.vector.Vector2; import com.dfsek.terra.debug.Debug; -import com.dfsek.terra.procgen.math.Vector2; import com.dfsek.terra.util.structure.RotationUtil; import net.jafama.FastMath; import org.bukkit.Bukkit; diff --git a/src/main/java/com/dfsek/terra/structure/StructureInfo.java b/src/main/java/com/dfsek/terra/structure/StructureInfo.java index e08fddcbf..0cff30ca6 100644 --- a/src/main/java/com/dfsek/terra/structure/StructureInfo.java +++ b/src/main/java/com/dfsek/terra/structure/StructureInfo.java @@ -1,6 +1,6 @@ package com.dfsek.terra.structure; -import com.dfsek.terra.procgen.math.Vector2; +import com.dfsek.terra.api.generic.world.vector.Vector2; import net.jafama.FastMath; import java.io.Serializable; diff --git a/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java b/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java index c83661315..cd563e73e 100644 --- a/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java +++ b/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java @@ -1,6 +1,6 @@ package com.dfsek.terra.util.structure; -import com.dfsek.terra.procgen.math.Vector2; +import com.dfsek.terra.api.generic.world.vector.Vector2; import com.dfsek.terra.structure.Rotation; import com.google.common.collect.Sets; import net.jafama.FastMath;