Archived
0

создана реализация FlatChunkProvider

This commit is contained in:
2018-08-26 01:20:09 +03:00
parent 464a2e7be6
commit 24376c391e
2 changed files with 64 additions and 22 deletions

View File

@@ -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<String> listOfLayers) {
List<BlockType> 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
}
}

View File

@@ -5,12 +5,14 @@
package mc.world.simple; package mc.world.simple;
import lombok.Getter; import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import mc.core.EntityLocation; import mc.core.EntityLocation;
import mc.core.world.World; import mc.core.world.World;
import mc.core.world.WorldType; import mc.core.world.WorldType;
import mc.core.world.block.BlockType; import mc.core.world.block.BlockType;
import mc.core.world.chunk.Chunk; import mc.core.world.chunk.Chunk;
import mc.core.world.chunk.ChunkProvider;
import mc.core.world.chunk.ChunkSection; import mc.core.world.chunk.ChunkSection;
import java.util.ArrayList; import java.util.ArrayList;
@@ -21,13 +23,14 @@ public class SimpleWorld implements World {
@Getter @Getter
private final WorldType worldType = WorldType.FLAT; private final WorldType worldType = WorldType.FLAT;
private EntityLocation spawn; private EntityLocation spawn;
private ChunkSection chunkSection; @Setter
private ChunkProvider chunkProvider;
@Override @Override
public EntityLocation getSpawn() { public EntityLocation getSpawn() {
if (this.spawn == null) { if (this.spawn == null) {
log.warn("Spawn is not defined! Set spawn [0, 6, 0]"); 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; return this.spawn;
@@ -40,9 +43,7 @@ public class SimpleWorld implements World {
@Override @Override
public Chunk getChunk(int x, int z) { public Chunk getChunk(int x, int z) {
Chunk chunk = new SimpleChunk(x, z); return chunkProvider.getChunk(x, z);
chunk.setChunkSection(0, chunkSection);
return chunk;
} }
@Override @Override
@@ -50,24 +51,14 @@ public class SimpleWorld implements World {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
@Deprecated
public void setLayersBlock(List<String> listOfLayers) { public void setLayersBlock(List<String> listOfLayers) {
List<BlockType> layoutsBlock = new ArrayList<>(); if (chunkProvider == null) {
FlatChunkProvider chunkProvider = new FlatChunkProvider();
for (String value : listOfLayers) { chunkProvider.setLayersBlock(listOfLayers);
String[] splitValue = value.split(";"); this.chunkProvider = chunkProvider;
} else if (this.chunkProvider instanceof FlatChunkProvider) {
BlockType blockType; ((FlatChunkProvider)chunkProvider).setLayersBlock(listOfLayers);
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);
} }
} }