diff --git a/simple_world/src/main/java/mc/world/simple/FlatChunkProvider.java b/simple_world/src/main/java/mc/world/simple/FlatChunkProvider.java new file mode 100644 index 0000000..af13eb8 --- /dev/null +++ b/simple_world/src/main/java/mc/world/simple/FlatChunkProvider.java @@ -0,0 +1,51 @@ +package mc.world.simple; + +import mc.core.world.block.BlockType; +import mc.core.world.chunk.Chunk; +import mc.core.world.chunk.ChunkProvider; +import mc.core.world.chunk.ChunkSection; + +import java.util.ArrayList; +import java.util.List; + +public class FlatChunkProvider implements ChunkProvider { + private ChunkSection chunkSection; + + public void setLayersBlock(List listOfLayers) { + List layoutsBlock = new ArrayList<>(); + + for (String value : listOfLayers) { + String[] splitValue = value.split(";"); + + BlockType blockType; + try { + blockType = BlockType.valueOf(splitValue[1]); + } catch (IllegalArgumentException e) { + continue; + } + + for (int i = 0; i < Integer.parseInt(splitValue[0]); i++) { + layoutsBlock.add(blockType); + } + } + + this.chunkSection = new SimpleChunkSection(layoutsBlock); + } + + @Override + public Chunk getChunk(int x, int z) { + Chunk chunk = new SimpleChunk(x, z); + chunk.setChunkSection(0, chunkSection); + return chunk; + } + + @Override + public void saveChunk(Chunk chunk) { + //TODO ignore + } + + @Override + public void saveChunk(Chunk... chunks) { + //TODO ignore + } +} diff --git a/simple_world/src/main/java/mc/world/simple/SimpleWorld.java b/simple_world/src/main/java/mc/world/simple/SimpleWorld.java index 76d3217..4346820 100644 --- a/simple_world/src/main/java/mc/world/simple/SimpleWorld.java +++ b/simple_world/src/main/java/mc/world/simple/SimpleWorld.java @@ -5,12 +5,14 @@ package mc.world.simple; import lombok.Getter; +import lombok.Setter; import lombok.extern.slf4j.Slf4j; import mc.core.EntityLocation; import mc.core.world.World; import mc.core.world.WorldType; import mc.core.world.block.BlockType; import mc.core.world.chunk.Chunk; +import mc.core.world.chunk.ChunkProvider; import mc.core.world.chunk.ChunkSection; import java.util.ArrayList; @@ -21,13 +23,14 @@ public class SimpleWorld implements World { @Getter private final WorldType worldType = WorldType.FLAT; private EntityLocation spawn; - private ChunkSection chunkSection; + @Setter + private ChunkProvider chunkProvider; @Override public EntityLocation getSpawn() { if (this.spawn == null) { log.warn("Spawn is not defined! Set spawn [0, 6, 0]"); - this.spawn = new EntityLocation(0d, 6d, 0d, 0f, 0f, this); + setSpawn(0d, 6d, 0d); } return this.spawn; @@ -40,9 +43,7 @@ public class SimpleWorld implements World { @Override public Chunk getChunk(int x, int z) { - Chunk chunk = new SimpleChunk(x, z); - chunk.setChunkSection(0, chunkSection); - return chunk; + return chunkProvider.getChunk(x, z); } @Override @@ -50,24 +51,14 @@ public class SimpleWorld implements World { throw new UnsupportedOperationException(); } + @Deprecated public void setLayersBlock(List listOfLayers) { - List layoutsBlock = new ArrayList<>(); - - for (String value : listOfLayers) { - String[] splitValue = value.split(";"); - - BlockType blockType; - try { - blockType = BlockType.valueOf(splitValue[1]); - } catch (IllegalArgumentException e) { - continue; - } - - for (int i = 0; i < Integer.parseInt(splitValue[0]); i++) { - layoutsBlock.add(blockType); - } + if (chunkProvider == null) { + FlatChunkProvider chunkProvider = new FlatChunkProvider(); + chunkProvider.setLayersBlock(listOfLayers); + this.chunkProvider = chunkProvider; + } else if (this.chunkProvider instanceof FlatChunkProvider) { + ((FlatChunkProvider)chunkProvider).setLayersBlock(listOfLayers); } - - this.chunkSection = new SimpleChunkSection(layoutsBlock); } }