diff --git a/build.gradle b/build.gradle index 13d4052..74a7f0e 100644 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,6 @@ subprojects { /* Components */ compile (group: 'org.projectlombok', name: 'lombok', version: '1.16.16') - compile 'com.flowpowered:flow-nbt:1.0.0' //Named Binary Tags } task copyDep(type: Copy) { diff --git a/core/build.gradle b/core/build.gradle index 98cd941..0ae659a 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -14,4 +14,6 @@ dependencies { /* Components */ compile (group: 'commons-io', name: 'commons-io', version: '2.6') compile (group: 'com.google.guava', name: 'guava', version: '24.1-jre') + /* Named Binary Tags */ + compile (group: 'com.flowpowered', name: 'flow-nbt', version: '1.0.0') } diff --git a/core/src/main/java/mc/core/Location.java b/core/src/main/java/mc/core/Location.java index 7e560f3..adee609 100644 --- a/core/src/main/java/mc/core/Location.java +++ b/core/src/main/java/mc/core/Location.java @@ -35,6 +35,12 @@ public class Location implements Serializable{ set(compactValue); } + public void set(double x, double y, double z) { + this.x = x; + this.y = y; + this.z = z; + } + public void set(Location location) { this.x = location.x; this.y = location.y; diff --git a/core/src/main/java/mc/core/serialization/IChunkReader.java b/core/src/main/java/mc/core/serialization/IChunkReader.java index 0ecf126..4cb4530 100644 --- a/core/src/main/java/mc/core/serialization/IChunkReader.java +++ b/core/src/main/java/mc/core/serialization/IChunkReader.java @@ -1,6 +1,6 @@ package mc.core.serialization; -import mc.core.world.Chunk; +import mc.core.world.chunk.Chunk; import mc.core.world.Region; import java.io.IOException; diff --git a/core/src/main/java/mc/core/world/Region.java b/core/src/main/java/mc/core/world/Region.java index dec2730..8448422 100644 --- a/core/src/main/java/mc/core/world/Region.java +++ b/core/src/main/java/mc/core/world/Region.java @@ -2,6 +2,7 @@ package mc.core.world; import mc.core.serialization.IRegionReaderWriter; import mc.core.serialization.Serializer; +import mc.core.world.chunk.Chunk; import java.io.IOException; import java.io.Serializable; diff --git a/core/src/main/java/mc/core/world/World.java b/core/src/main/java/mc/core/world/World.java index bc18bf8..0bde5b1 100644 --- a/core/src/main/java/mc/core/world/World.java +++ b/core/src/main/java/mc/core/world/World.java @@ -4,9 +4,9 @@ */ package mc.core.world; -import mc.core.Location; import mc.core.WarpPosition; import mc.core.nbt.Taggable; +import mc.core.world.chunk.Chunk; import java.io.Serializable; import java.util.UUID; diff --git a/core/src/main/java/mc/core/world/block/AbstractBlock.java b/core/src/main/java/mc/core/world/block/AbstractBlock.java index 1e98d40..5d0572c 100644 --- a/core/src/main/java/mc/core/world/block/AbstractBlock.java +++ b/core/src/main/java/mc/core/world/block/AbstractBlock.java @@ -16,6 +16,9 @@ public abstract class AbstractBlock implements Block { @Getter private int meta; @Getter + @Setter + private int light = 0; //TODO need to know range of values + @Getter private final BlockType blockType; private final Map> nbtTagsMap = new HashMap<>(); diff --git a/core/src/main/java/mc/core/world/block/Block.java b/core/src/main/java/mc/core/world/block/Block.java index 655bf18..a140ab0 100644 --- a/core/src/main/java/mc/core/world/block/Block.java +++ b/core/src/main/java/mc/core/world/block/Block.java @@ -38,6 +38,9 @@ public interface Block extends Taggable, Serializable{ */ int getMeta(); + int getLight(); + void setLight(int light); + /** * Getting block type */ diff --git a/core/src/main/java/mc/core/world/block/BlockFactory.java b/core/src/main/java/mc/core/world/block/BlockFactory.java index 2405524..868eb52 100644 --- a/core/src/main/java/mc/core/world/block/BlockFactory.java +++ b/core/src/main/java/mc/core/world/block/BlockFactory.java @@ -4,21 +4,25 @@ import mc.core.Location; public class BlockFactory { + public Block create(BlockType blockType, int meta, int x, int y, int z) { + return new EmbeddedBlock(blockType, meta, x, y, z); + } + public Block create(BlockType blockType, int meta) { - return new EmbeddedBlock(blockType, meta); + return new EmbeddedBlock(blockType, meta, 0, 0, 0); } public Block create(BlockType blockType) { - return create(blockType, 0); + return create(blockType, 0, 0, 0, 0); } /** * For first-time generation */ private class EmbeddedBlock extends AbstractBlock { - EmbeddedBlock(BlockType type, int meta) { + EmbeddedBlock(BlockType type, int meta, int x, int y, int z) { super(type, meta); - super.setLocation(new Location(0,0,0)); + super.setLocation(new Location(x,y,z)); } } } diff --git a/core/src/main/java/mc/core/world/block/BlockType.java b/core/src/main/java/mc/core/world/block/BlockType.java index 4b4b467..7adb32a 100644 --- a/core/src/main/java/mc/core/world/block/BlockType.java +++ b/core/src/main/java/mc/core/world/block/BlockType.java @@ -1,16 +1,16 @@ -package mc.core.block; +package mc.core.world.block; import lombok.Getter; public enum BlockType { + AIR(0, "Air"), STONE(1, "Stone"), GRASS(2, "Grass"), DIRT(3, "Dirt"), BEDROCK(7, "Bedrock"), WATER(8, "Water"), SAND(12, "Sand"), - SNOW(32, "Snow"), - AIR(0, "Air"); + SNOW(32, "Snow"); @Getter private final int id; diff --git a/core/src/main/java/mc/core/world/chunk/Chunk.java b/core/src/main/java/mc/core/world/chunk/Chunk.java index c99afc3..38593d4 100644 --- a/core/src/main/java/mc/core/world/chunk/Chunk.java +++ b/core/src/main/java/mc/core/world/chunk/Chunk.java @@ -2,9 +2,10 @@ * DmitriyMX * 2018-04-15 */ -package mc.core.world; +package mc.core.world.chunk; import mc.core.Location; +import mc.core.world.Biome; import mc.core.world.block.Block; import java.io.Serializable; diff --git a/core/src/main/java/mc/core/world/chunk/ChunkLoader.java b/core/src/main/java/mc/core/world/chunk/ChunkLoader.java index a8213e4..cd0f06f 100644 --- a/core/src/main/java/mc/core/world/chunk/ChunkLoader.java +++ b/core/src/main/java/mc/core/world/chunk/ChunkLoader.java @@ -1,4 +1,4 @@ -package mc.core.world; +package mc.core.world.chunk; import java.util.Optional; 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 4f7ef22..8813b51 100644 --- a/flat_world/src/main/java/mc/world/flat/FlatWorld.java +++ b/flat_world/src/main/java/mc/world/flat/FlatWorld.java @@ -11,21 +11,24 @@ import mc.core.Location; import mc.core.WarpPosition; import mc.core.player.Look; import mc.core.world.*; +import mc.core.world.chunk.Chunk; import java.util.UUID; import java.util.stream.Stream; public class FlatWorld implements World { - @Getter@Setter + @Getter + @Setter private UUID worldId = UUID.fromString("00000000-0000-0000-C000-000000000046"); - @Getter@Setter + @Getter + @Setter private String name; @Getter @Setter private WarpPosition spawn = new WarpPosition(new Location(0, 6, 0), new Look(0, 0)); - private Chunk chunk = new SimpleChunk(); + private Chunk chunk = new SimpleChunk(0, 0, 0); //FIXME temporary dummy @Override public IWorldType getWorldType() { @@ -49,7 +52,7 @@ public class FlatWorld implements World { @Override public void setRegion(int x, int z, Region region) { - + throw new UnsupportedOperationException(); } @Override diff --git a/generated_world/src/main/java/mc/world/generated_world/chunk/ChunkImpl.java b/generated_world/src/main/java/mc/world/generated_world/chunk/ChunkImpl.java index 464b980..f2cd8fd 100644 --- a/generated_world/src/main/java/mc/world/generated_world/chunk/ChunkImpl.java +++ b/generated_world/src/main/java/mc/world/generated_world/chunk/ChunkImpl.java @@ -2,16 +2,18 @@ package mc.world.generated_world.chunk; import lombok.Getter; import lombok.RequiredArgsConstructor; -import mc.core.block.Block; -import mc.core.block.BlockType; +import mc.core.world.block.Block; +import mc.core.world.block.BlockFactory; +import mc.core.world.block.BlockType; import mc.core.world.Biome; -import mc.core.world.Chunk; +import mc.core.world.chunk.Chunk; import mc.core.world.Region; import static mc.world.generated_world.WorldConstants.WORLD_CHUNK_SIZE; @RequiredArgsConstructor public class ChunkImpl implements Chunk{ + private static final BlockFactory blockFactory = new BlockFactory(); @Getter private final int x; @Getter @@ -22,33 +24,25 @@ public class ChunkImpl implements Chunk{ private final transient Region region; @Override - public int getBlockType(int x, int y, int z) { - return blocks[x][y][z].getId(); + public Block getBlock(int x, int y, int z) { + Block block = blocks[x][y][z]; + if (block == null) { + block = blockFactory.create(BlockType.AIR, 0, x, y, z); + } + block.setLight(15); + return block; } @Override - public void setBlockType(int x, int y, int z, int type) { - - } - - @Override - public int getBlockMetadata(int x, int y, int z) { - return 0; - } - - @Override - public void setBlockMetadata(int x, int y, int z, int metadata) { - - } - - @Override - public int getBlockLight(int x, int y, int z) { - return 15; - } - - @Override - public void setBlockLight(int x, int y, int z, int lightLevel) { - + public void setBlock(Block block) { + if (block.getBlockType() == BlockType.AIR) { + blocks[block.getLocation().getBlockX()] + [block.getLocation().getBlockY()] + [block.getLocation().getBlockZ()] = null; + } + blocks[block.getLocation().getBlockX()] + [block.getLocation().getBlockY()] + [block.getLocation().getBlockZ()] = block; } @Override @@ -58,7 +52,7 @@ public class ChunkImpl implements Chunk{ @Override public void setSkyLight(int x, int y, int z, int lightLevel) { - + throw new UnsupportedOperationException(); } @Override @@ -68,7 +62,7 @@ public class ChunkImpl implements Chunk{ @Override public void setAddition(int x, int y, int z, int value) { - + throw new UnsupportedOperationException(); } @Override @@ -80,21 +74,4 @@ public class ChunkImpl implements Chunk{ public void setBiome(int x, int z, Biome biome) { region.setBiome(x + this.x * WORLD_CHUNK_SIZE,z + this.z * WORLD_CHUNK_SIZE, biome); } - - @Override - public void setBlock(int x, int y, int z, Block block) { - if (block.getBlockType() == BlockType.AIR) { - blocks[x][y][z] = null; - } - blocks[x][y][z] = block; - } - - @Override - public Block getBlock(int x, int y, int z) { - Block block = blocks[x][y][z]; - if (block == null) { - return Block.airBlock(x, y, z); - } - return blocks[x][y][z]; - } } diff --git a/generated_world/src/main/java/mc/world/generated_world/chunk/ChunkProxy.java b/generated_world/src/main/java/mc/world/generated_world/chunk/ChunkProxy.java index 4490001..12e628e 100644 --- a/generated_world/src/main/java/mc/world/generated_world/chunk/ChunkProxy.java +++ b/generated_world/src/main/java/mc/world/generated_world/chunk/ChunkProxy.java @@ -1,8 +1,8 @@ package mc.world.generated_world.chunk; -import mc.core.block.Block; +import mc.core.world.block.Block; import mc.core.world.Biome; -import mc.core.world.Chunk; +import mc.core.world.chunk.Chunk; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -29,39 +29,15 @@ public class ChunkProxy implements Chunk { } @Override - public int getBlockType(int x, int y, int z) { + public Block getBlock(int x, int y, int z) { use(); - return chunk.getBlockType(x, y, z); + return chunk.getBlock(x, y, z); } @Override - public void setBlockType(int x, int y, int z, int type) { + public void setBlock(Block block) { use(); - chunk.setBlockType(x, y, z, type); - } - - @Override - public int getBlockMetadata(int x, int y, int z) { - use(); - return chunk.getBlockMetadata(x, y, z); - } - - @Override - public void setBlockMetadata(int x, int y, int z, int metadata) { - use(); - chunk.setBlockMetadata(x, y, z, metadata); - } - - @Override - public int getBlockLight(int x, int y, int z) { - use(); - return chunk.getBlockLight(x, y, z); - } - - @Override - public void setBlockLight(int x, int y, int z, int lightLevel) { - use(); - chunk.setBlockLight(x, y, z, lightLevel); + chunk.setBlock(block); } @Override @@ -117,16 +93,4 @@ public class ChunkProxy implements Chunk { use(); return chunk.getZ(); } - - @Override - public void setBlock(int x, int y, int z, Block block) { - use(); - chunk.setBlock(x, y, z, block); - } - - @Override - public Block getBlock(int x, int y, int z) { - use(); - return chunk.getBlock(x, y, z); - } } diff --git a/generated_world/src/main/java/mc/world/generated_world/chunk/InMemoryCacheChunkLoader.java b/generated_world/src/main/java/mc/world/generated_world/chunk/InMemoryCacheChunkLoader.java index 2724497..c499d7f 100644 --- a/generated_world/src/main/java/mc/world/generated_world/chunk/InMemoryCacheChunkLoader.java +++ b/generated_world/src/main/java/mc/world/generated_world/chunk/InMemoryCacheChunkLoader.java @@ -3,6 +3,8 @@ package mc.world.generated_world.chunk; import lombok.extern.slf4j.Slf4j; import mc.core.serialization.Serializer; import mc.core.world.*; +import mc.core.world.chunk.Chunk; +import mc.core.world.chunk.ChunkLoader; import mc.world.generated_world.serialization.ChunkReader; import mc.world.generated_world.serialization.RegionReaderWriter; import org.springframework.beans.factory.annotation.Autowired; diff --git a/generated_world/src/main/java/mc/world/generated_world/generator/SeedBasedWorldGenerator.java b/generated_world/src/main/java/mc/world/generated_world/generator/SeedBasedWorldGenerator.java index 8253165..8b8ce2d 100644 --- a/generated_world/src/main/java/mc/world/generated_world/generator/SeedBasedWorldGenerator.java +++ b/generated_world/src/main/java/mc/world/generated_world/generator/SeedBasedWorldGenerator.java @@ -2,9 +2,10 @@ package mc.world.generated_world.generator; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import mc.core.block.BlockFactory; -import mc.core.block.BlockType; +import mc.core.world.block.BlockFactory; +import mc.core.world.block.BlockType; import mc.core.world.*; +import mc.core.world.chunk.Chunk; import mc.world.generated_world.region.RegionImpl; import mc.world.generated_world.serialization.ChunkSerializer; import mc.world.generated_world.serialization.RegionReaderWriter; @@ -308,35 +309,35 @@ public class SeedBasedWorldGenerator implements WorldGenerator { for (int y = 0; y < WORLD_SEA_LEVEL; y ++) { Chunk chunk = region.getChunkAt(x / 16, y / 16, z / 16); if (y == 0) { - chunk.setBlock(x % 16, y % 16, z % 16, blockFactory.create(BlockType.BEDROCK, 0)); + chunk.setBlock(blockFactory.create(BlockType.BEDROCK, 0, x % 16, y % 16, z % 16)); continue; } if (y < heightMap[x][z]) { if (y < heightMap[x][z] - grassMap[x][z]) { - chunk.setBlock(x % 16, y % 16, z % 16, blockFactory.create(BlockType.STONE, 0)); + chunk.setBlock(blockFactory.create(BlockType.STONE, 0, x % 16, y % 16, z % 16)); } else { - chunk.setBlock(x % 16, y % 16, z % 16, blockFactory.create(BlockType.SAND, 0)); + chunk.setBlock(blockFactory.create(BlockType.SAND, 0, x % 16, y % 16, z % 16)); } } else { - chunk.setBlock(x % 16, y % 16, z % 16, blockFactory.create(BlockType.WATER, 0)); + chunk.setBlock(blockFactory.create(BlockType.WATER, 0, x % 16, y % 16, z % 16)); } } } else { for (int y = 0; y < heightMap[x][z]; y++) { Chunk chunk = region.getChunkAt(x / 16, y / 16, z / 16); if (y == 0) { - chunk.setBlock(x % 16, y % 16, z % 16, blockFactory.create(BlockType.BEDROCK, 0)); + chunk.setBlock(blockFactory.create(BlockType.BEDROCK, 0, x % 16, y % 16, z % 16)); continue; } if (y < heightMap[x][z] - grassMap[x][z]) { - chunk.setBlock(x % 16, y % 16, z % 16, blockFactory.create(BlockType.STONE, 0)); + chunk.setBlock(blockFactory.create(BlockType.STONE, 0, x % 16, y % 16, z % 16)); } else { if (biomes[x][z] == Biome.DESERT || biomes[x][z] == Biome.DESERT_HILLS) { - chunk.setBlock(x % 16, y % 16, z % 16, blockFactory.create(BlockType.SAND, 0)); + chunk.setBlock(blockFactory.create(BlockType.SAND, 0, x % 16, y % 16, z % 16)); } else if (biomes[x][z] == Biome.TAIGA || biomes[x][z] == Biome.TAIGA_HILLS) { - chunk.setBlock(x % 16, y % 16, z % 16, blockFactory.create(BlockType.DIRT, 0)); + chunk.setBlock(blockFactory.create(BlockType.DIRT, 0, x % 16, y % 16, z % 16)); } else { - chunk.setBlock(x % 16, y % 16, z % 16, blockFactory.create(BlockType.GRASS, 0)); + chunk.setBlock(blockFactory.create(BlockType.GRASS, 0, x % 16, y % 16, z % 16)); } } } diff --git a/generated_world/src/main/java/mc/world/generated_world/region/RegionImpl.java b/generated_world/src/main/java/mc/world/generated_world/region/RegionImpl.java index 812512f..83cb6c6 100644 --- a/generated_world/src/main/java/mc/world/generated_world/region/RegionImpl.java +++ b/generated_world/src/main/java/mc/world/generated_world/region/RegionImpl.java @@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j; import mc.core.serialization.IRegionReaderWriter; import mc.core.serialization.Serializer; import mc.core.world.*; +import mc.core.world.chunk.Chunk; +import mc.core.world.chunk.ChunkLoader; import mc.world.generated_world.chunk.InMemoryCacheChunkLoader; import mc.world.generated_world.chunk.ChunkImpl; import mc.world.generated_world.chunk.ChunkProxy; diff --git a/generated_world/src/main/java/mc/world/generated_world/serialization/BlockSerializerDeserializer.java b/generated_world/src/main/java/mc/world/generated_world/serialization/BlockSerializerDeserializer.java index a176afe..3863fb0 100644 --- a/generated_world/src/main/java/mc/world/generated_world/serialization/BlockSerializerDeserializer.java +++ b/generated_world/src/main/java/mc/world/generated_world/serialization/BlockSerializerDeserializer.java @@ -1,11 +1,11 @@ package mc.world.generated_world.serialization; -import mc.core.block.Block; -import mc.core.block.BlockFactory; -import mc.core.block.BlockType; +import mc.core.world.block.Block; +import mc.core.world.block.BlockFactory; +import mc.core.world.block.BlockType; import mc.core.serialization.Deserializer; import mc.core.serialization.Serializer; -import mc.core.world.Chunk; +import mc.core.world.chunk.Chunk; /** * Prototype diff --git a/generated_world/src/main/java/mc/world/generated_world/serialization/ChunkReader.java b/generated_world/src/main/java/mc/world/generated_world/serialization/ChunkReader.java index 8b77dde..5e7c419 100644 --- a/generated_world/src/main/java/mc/world/generated_world/serialization/ChunkReader.java +++ b/generated_world/src/main/java/mc/world/generated_world/serialization/ChunkReader.java @@ -1,10 +1,9 @@ package mc.world.generated_world.serialization; -import mc.core.Location; -import mc.core.block.Block; +import mc.core.world.block.Block; import mc.core.serialization.Deserializer; import mc.core.serialization.IChunkReader; -import mc.core.world.Chunk; +import mc.core.world.chunk.Chunk; import mc.core.world.Region; import mc.world.generated_world.chunk.ChunkImpl; import org.springframework.beans.factory.annotation.Autowired; @@ -41,8 +40,7 @@ public class ChunkReader implements IChunkReader{ blockBytes[1] = chunkBytes[1 + 3 * i]; blockBytes[2] = chunkBytes[2 + 3 * i]; Block block = blockDeserializer.deserialize(blockBytes); - Location blockLocation = block.getLocation(); - chunk.setBlock(blockLocation.getBlockX(), blockLocation.getBlockY(), blockLocation.getBlockZ(), block); + chunk.setBlock(block); } return chunk; } diff --git a/generated_world/src/main/java/mc/world/generated_world/serialization/ChunkSerializer.java b/generated_world/src/main/java/mc/world/generated_world/serialization/ChunkSerializer.java index aae910b..cba4572 100644 --- a/generated_world/src/main/java/mc/world/generated_world/serialization/ChunkSerializer.java +++ b/generated_world/src/main/java/mc/world/generated_world/serialization/ChunkSerializer.java @@ -1,11 +1,11 @@ package mc.world.generated_world.serialization; import lombok.extern.slf4j.Slf4j; -import mc.core.block.Block; -import mc.core.block.BlockFactory; -import mc.core.block.BlockType; +import mc.core.world.block.Block; +import mc.core.world.block.BlockFactory; +import mc.core.world.block.BlockType; import mc.core.serialization.Serializer; -import mc.core.world.Chunk; +import mc.core.world.chunk.Chunk; import org.springframework.beans.factory.annotation.Autowired; import java.io.ByteArrayOutputStream; diff --git a/generated_world/src/main/java/mc/world/generated_world/world/CubicWorld.java b/generated_world/src/main/java/mc/world/generated_world/world/CubicWorld.java index 6c39781..d7f1724 100644 --- a/generated_world/src/main/java/mc/world/generated_world/world/CubicWorld.java +++ b/generated_world/src/main/java/mc/world/generated_world/world/CubicWorld.java @@ -6,9 +6,9 @@ import lombok.Setter; import lombok.extern.slf4j.Slf4j; import mc.core.Location; import mc.core.WarpPosition; -import mc.core.block.BlockType; +import mc.core.world.block.BlockType; import mc.core.player.Look; -import mc.core.world.Chunk; +import mc.core.world.chunk.Chunk; import mc.core.world.IWorldType; import mc.core.world.Region; import mc.core.world.World; diff --git a/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/ChunkDataPacket.java b/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/ChunkDataPacket.java index aecbbc6..122ff39 100644 --- a/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/ChunkDataPacket.java +++ b/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/ChunkDataPacket.java @@ -8,14 +8,12 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; -import mc.core.Location; import mc.core.network.NetOutputStream; import mc.core.network.SCPacket; import mc.core.network.proto_1_12_2.ByteArrayOutputNetStream; -import mc.core.world.Block; -import mc.core.world.Chunk; +import mc.core.world.block.Block; +import mc.core.world.chunk.Chunk; -import java.io.*; import java.util.ArrayList; import java.util.List; @@ -80,8 +78,8 @@ public class ChunkDataPacket implements SCPacket { @Getter private List chunks = new ArrayList<>(); - private int serializeBlockState(int id, int state) { - return (id << 4) | state; + private int serializeBlockState(int id, int meta) { + return (id << 4) | meta; } @Override @@ -115,7 +113,7 @@ public class ChunkDataPacket implements SCPacket { for (int z = 0; z < 16; z++) { for (int x = 0; x < 16; x++) { Block block = chunk.getBlock(x, y, z); - int blockState = serializeBlockState(block.getId(), block.getState()); + int blockState = serializeBlockState(block.getId(), block.getMeta()); int currentIndexPaletteBlock; if (!palette.contains(blockState)) { @@ -151,7 +149,7 @@ public class ChunkDataPacket implements SCPacket { } if (!biomeFinally) { - biomes.writeByte(chunk.getBiome(x, z)); + biomes.writeByte(chunk.getBiome(x, z).getId()); if (x == 15 && z == 15) { biomeFinally = true; } diff --git a/proto_1.12.2_netty/src/main/java/mc/core/network/proto_1_12_2/netty/handlers/LoginHandler.java b/proto_1.12.2_netty/src/main/java/mc/core/network/proto_1_12_2/netty/handlers/LoginHandler.java index a0c9591..efc67d3 100644 --- a/proto_1.12.2_netty/src/main/java/mc/core/network/proto_1_12_2/netty/handlers/LoginHandler.java +++ b/proto_1.12.2_netty/src/main/java/mc/core/network/proto_1_12_2/netty/handlers/LoginHandler.java @@ -48,7 +48,7 @@ public class LoginHandler extends AbstractStateHandler implements LoginStateHand Player player = playerManager.getPlayer(packet.getPlayerName()) .orElseGet(() -> playerManager.createPlayer( packet.getPlayerName(), - world.getSpawn(), + world.getSpawn().getLocation(), new Look(0f, 0f))); channel.writeAndFlush(new LoginSuccessPacket( @@ -68,7 +68,7 @@ public class LoginHandler extends AbstractStateHandler implements LoginStateHand // Spawn Position SpawnPositionPacket pkt2 = new SpawnPositionPacket(); - pkt2.setLocation(world.getSpawn()); + pkt2.setLocation(world.getSpawn().getLocation()); channel.write(pkt2); // Player Abilities @@ -80,22 +80,14 @@ public class LoginHandler extends AbstractStateHandler implements LoginStateHand channel.write(pkt3); channel.flush(); - // Send chunk data + // One Chunk ChunkDataPacket pkt8 = new ChunkDataPacket(); pkt8.setX(0); pkt8.setZ(0); - pkt8.getChunks().add(world.getChunk(0,0)); + pkt8.getChunks().add(world.getChunk(0, 0,0)); pkt8.setInitChunk(true); channel.writeAndFlush(pkt8); - // One Chunk - ChunkDataPacket pkt9 = new ChunkDataPacket(); - pkt9.setInitChunk(true); - pkt9.setX(0); - pkt9.setZ(0); - pkt9.getChunks().add(world.getChunk(0, 0)); - channel.writeAndFlush(pkt9); - // Player Position And Look PlayerPositionAndLookPacket pkt4 = new PlayerPositionAndLookPacket(); pkt4.setLocation(player.getLocation()); diff --git a/settings.gradle b/settings.gradle index 7855426..b865638 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,5 +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' +include('generated_world')