diff --git a/core/src/main/java/mc/core/Location.java b/core/src/main/java/mc/core/Location.java index fa1e00b..78b25c8 100644 --- a/core/src/main/java/mc/core/Location.java +++ b/core/src/main/java/mc/core/Location.java @@ -20,6 +20,10 @@ public class Location { ); } + public static Location startPointLocation () { + return new Location(0,10,0); + } + public void set(Location location) { this.x = location.x; this.y = location.y; diff --git a/core/src/main/java/mc/core/world/ChunkLoader.java b/core/src/main/java/mc/core/world/ChunkLoader.java new file mode 100644 index 0000000..a8213e4 --- /dev/null +++ b/core/src/main/java/mc/core/world/ChunkLoader.java @@ -0,0 +1,27 @@ +package mc.core.world; + +import java.util.Optional; + +public interface ChunkLoader { + + /** + * Loads chunk from cache. If chunk in cache doesn't exist, loads from file (or other storage) + * + * @param x chunk position + * @param y chunk position + * @param z chunk position + * @return optional of chunk (nullable) + */ + Optional loadChunk (int x, int y, int z); + + /** + * Tries to load chunk like {@link #loadChunk(int, int, int)} + * If chunk doesn't exist, generates it with selected world generator + * + * @param x chunk position + * @param y chunk position + * @param z chunk position + * @return chunk + */ + Chunk loadOrGenerateChunk (int x, int y, int z); +} diff --git a/core/src/main/java/mc/core/world/World.java b/core/src/main/java/mc/core/world/World.java index be5002b..6da22a8 100644 --- a/core/src/main/java/mc/core/world/World.java +++ b/core/src/main/java/mc/core/world/World.java @@ -6,10 +6,14 @@ package mc.core.world; import mc.core.Location; +import java.util.UUID; + public interface World { + UUID getWorldId(); + Location getSpawn(); void setSpawn(Location location); - Chunk getChunk(int x, int z); - void setChunk(int x, int z, Chunk chunk); + Chunk getChunk(int x, int y, int z); + void setChunk(int x, int y, int z, Chunk chunk); } diff --git a/core/src/main/java/mc/core/world/WorldGenerator.java b/core/src/main/java/mc/core/world/WorldGenerator.java new file mode 100644 index 0000000..4b5fd30 --- /dev/null +++ b/core/src/main/java/mc/core/world/WorldGenerator.java @@ -0,0 +1,6 @@ +package mc.core.world; + +public interface WorldGenerator { + + Chunk generateChunk (int x, int z, World world); +} diff --git a/flat_world/src/main/java/mc/world/flat/FlatWorld.java b/flat_world/src/main/java/mc/world/flat/FlatWorld.java index 8340979..2e612a8 100644 --- a/flat_world/src/main/java/mc/world/flat/FlatWorld.java +++ b/flat_world/src/main/java/mc/world/flat/FlatWorld.java @@ -10,19 +10,25 @@ import mc.core.Location; import mc.core.world.Chunk; import mc.core.world.World; +import java.util.UUID; + public class FlatWorld implements World { + + @Getter@Setter + private UUID worldId; + @Getter @Setter private Location spawn = new Location(0, 6, 0); private Chunk chunk = new SimpleChunk(); @Override - public Chunk getChunk(int x, int z) { + public Chunk getChunk(int x, int y, int z) { return chunk; } @Override - public void setChunk(int x, int z, Chunk chunk) { + public void setChunk(int x, int y, int z, Chunk chunk) { throw new UnsupportedOperationException(); } } diff --git a/generated_world/build.gradle b/generated_world/build.gradle new file mode 100644 index 0000000..5c7cdc7 --- /dev/null +++ b/generated_world/build.gradle @@ -0,0 +1,7 @@ +group 'mc' +version '1.0-SNAPSHOT' + +dependencies { + compile_excludeCopy project(':core') + testCompile group: 'junit', name: 'junit', version: '4.12' +} diff --git a/settings.gradle b/settings.gradle index 52ad5e4..7855426 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,3 +5,5 @@ include('flat_world') include('vanilla_commands') include('proto_1.12.2') // Protocol 1.12.2 include('proto_1.12.2_netty') // Protocol 1.12.2 (Netty impl.) +include 'generated_world' +