wip world data types (chunk, ...)

This commit is contained in:
bixilon 2020-06-03 15:21:22 +02:00
parent dfefd5c50f
commit faab6664c6
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
14 changed files with 159 additions and 11 deletions

View File

@ -1,4 +1,4 @@
package de.bixilon.minosoft.objects;
package de.bixilon.minosoft.game.datatypes;
public class BlockPosition {
int x;
@ -27,6 +27,9 @@ public class BlockPosition {
@Override
public boolean equals(Object obj) {
if (super.equals(obj)) {
return true;
}
BlockPosition pos = (BlockPosition) obj;
return pos.getX() == getX() && pos.getY() == getY() && pos.getZ() == getZ();
}

View File

@ -0,0 +1,23 @@
package de.bixilon.minosoft.game.datatypes;
import java.util.HashMap;
/**
* Collection of 16x16x16 blocks
*/
public class Chunk {
private final HashMap<ChunkLocation, WorldBlock> blocks;
public Chunk() {
blocks = new HashMap<>();
}
public WorldBlock getWorldBlock(ChunkLocation loc) {
//ToDo will return air if null
return blocks.get(loc);
}
public WorldBlock getWorldBlock(byte x, byte y, byte z) {
return getWorldBlock(new ChunkLocation(x, y, z));
}
}

View File

@ -0,0 +1,23 @@
package de.bixilon.minosoft.game.datatypes;
import java.util.HashMap;
/**
* Collection of 16 chunks
*/
public class ChunkColumn {
private final HashMap<Byte, Chunk> chunks;
public ChunkColumn(int x, int z) {
chunks = new HashMap<>();
}
public WorldBlock getWorldBlock(byte x, short y, byte z) {
if (x > 16 || y > 255 || z > 16 || x < 0 || y < 0 || z < 0) {
throw new IllegalArgumentException(String.format("Invalid chunk location %s %s %s", x, y, z));
}
byte heightNumber = (byte) (y / 16);
return chunks.get(heightNumber).getWorldBlock(x, (byte) (y - (heightNumber * 16)), z);
}
}

View File

@ -0,0 +1,31 @@
package de.bixilon.minosoft.game.datatypes;
/**
* Chunk X and Z location (block position / 16, rounded down)
*/
public class ChunkColumnLocation {
int x;
int z;
public ChunkColumnLocation(int x, int z) {
this.x = x;
this.z = z;
}
public int getX() {
return x;
}
public int getZ() {
return z;
}
@Override
public boolean equals(Object obj) {
if (super.equals(obj)) {
return true;
}
ChunkColumnLocation that = (ChunkColumnLocation) obj;
return getX() == that.getX() && getZ() == that.getZ();
}
}

View File

@ -0,0 +1,37 @@
package de.bixilon.minosoft.game.datatypes;
/**
* Chunk X, Y and Z location (max 16x16x16)
*/
public class ChunkLocation {
byte x;
byte y;
byte z;
public ChunkLocation(byte x, byte y, byte z) {
this.x = x;
this.y = y;
this.z = z;
}
public byte getX() {
return x;
}
public byte getY() {
return y;
}
public byte getZ() {
return z;
}
@Override
public boolean equals(Object obj) {
if (super.equals(obj)) {
return true;
}
ChunkLocation that = (ChunkLocation) obj;
return getX() == that.getX() && getY() == that.getY() && getZ() == that.getZ();
}
}

View File

@ -1,4 +1,4 @@
package de.bixilon.minosoft.objects;
package de.bixilon.minosoft.game.datatypes;
public enum Difficulty {
PEACEFUL(0),

View File

@ -1,4 +1,4 @@
package de.bixilon.minosoft.objects;
package de.bixilon.minosoft.game.datatypes;
public enum Dimension {
NETHER(-1),

View File

@ -1,4 +1,4 @@
package de.bixilon.minosoft.objects;
package de.bixilon.minosoft.game.datatypes;
public enum GameMode {
SURVIVAL(0),

View File

@ -1,4 +1,4 @@
package de.bixilon.minosoft.objects;
package de.bixilon.minosoft.game.datatypes;
public enum LevelType {
DEFAULT("default"),

View File

@ -0,0 +1,24 @@
package de.bixilon.minosoft.game.datatypes;
import java.util.HashMap;
/**
* Collection of ChunkColumns
*/
public class World {
public final HashMap<ChunkColumnLocation, ChunkColumn> chunks;
final String name;
public World(String name) {
this.name = name;
chunks = new HashMap<>();
}
public String getName() {
return name;
}
public ChunkColumn getChunkColumn(ChunkColumnLocation loc) {
return chunks.get(loc);
}
}

View File

@ -0,0 +1,7 @@
package de.bixilon.minosoft.game.datatypes;
/**
* Basically raw chunk stuff. This is not a block like dirt (it can be). Can be dirt, a flower, fire, torch, sapling, fluid (water/lava), nether wart, banner, ...
*/
public class WorldBlock {
}

View File

@ -1,10 +1,10 @@
package de.bixilon.minosoft.protocol.packets.clientbound.play;
import de.bixilon.minosoft.game.datatypes.Difficulty;
import de.bixilon.minosoft.game.datatypes.Dimension;
import de.bixilon.minosoft.game.datatypes.GameMode;
import de.bixilon.minosoft.game.datatypes.LevelType;
import de.bixilon.minosoft.logging.Log;
import de.bixilon.minosoft.objects.Difficulty;
import de.bixilon.minosoft.objects.Dimension;
import de.bixilon.minosoft.objects.GameMode;
import de.bixilon.minosoft.objects.LevelType;
import de.bixilon.minosoft.protocol.packets.ClientboundPacket;
import de.bixilon.minosoft.protocol.protocol.InPacketBuffer;
import de.bixilon.minosoft.protocol.protocol.PacketHandler;

View File

@ -1,6 +1,6 @@
package de.bixilon.minosoft.protocol.protocol;
import de.bixilon.minosoft.objects.BlockPosition;
import de.bixilon.minosoft.game.datatypes.BlockPosition;
import org.json.JSONObject;
import java.nio.ByteBuffer;

View File

@ -1,6 +1,6 @@
package de.bixilon.minosoft.protocol.protocol;
import de.bixilon.minosoft.objects.BlockPosition;
import de.bixilon.minosoft.game.datatypes.BlockPosition;
import org.json.JSONObject;
import java.nio.ByteBuffer;