Archived
0

hotfix: Oops!

This commit is contained in:
2018-08-07 21:33:05 +03:00
parent 156984ea84
commit 2c611a888d
25 changed files with 107 additions and 151 deletions

View File

@@ -33,7 +33,6 @@ subprojects {
/* Components */ /* Components */
compile (group: 'org.projectlombok', name: 'lombok', version: '1.16.16') 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) { task copyDep(type: Copy) {

View File

@@ -14,4 +14,6 @@ dependencies {
/* Components */ /* Components */
compile (group: 'commons-io', name: 'commons-io', version: '2.6') compile (group: 'commons-io', name: 'commons-io', version: '2.6')
compile (group: 'com.google.guava', name: 'guava', version: '24.1-jre') 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')
} }

View File

@@ -35,6 +35,12 @@ public class Location implements Serializable{
set(compactValue); 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) { public void set(Location location) {
this.x = location.x; this.x = location.x;
this.y = location.y; this.y = location.y;

View File

@@ -1,6 +1,6 @@
package mc.core.serialization; package mc.core.serialization;
import mc.core.world.Chunk; import mc.core.world.chunk.Chunk;
import mc.core.world.Region; import mc.core.world.Region;
import java.io.IOException; import java.io.IOException;

View File

@@ -2,6 +2,7 @@ package mc.core.world;
import mc.core.serialization.IRegionReaderWriter; import mc.core.serialization.IRegionReaderWriter;
import mc.core.serialization.Serializer; import mc.core.serialization.Serializer;
import mc.core.world.chunk.Chunk;
import java.io.IOException; import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;

View File

@@ -4,9 +4,9 @@
*/ */
package mc.core.world; package mc.core.world;
import mc.core.Location;
import mc.core.WarpPosition; import mc.core.WarpPosition;
import mc.core.nbt.Taggable; import mc.core.nbt.Taggable;
import mc.core.world.chunk.Chunk;
import java.io.Serializable; import java.io.Serializable;
import java.util.UUID; import java.util.UUID;

View File

@@ -16,6 +16,9 @@ public abstract class AbstractBlock implements Block {
@Getter @Getter
private int meta; private int meta;
@Getter @Getter
@Setter
private int light = 0; //TODO need to know range of values
@Getter
private final BlockType blockType; private final BlockType blockType;
private final Map<String, Tag<?>> nbtTagsMap = new HashMap<>(); private final Map<String, Tag<?>> nbtTagsMap = new HashMap<>();

View File

@@ -38,6 +38,9 @@ public interface Block extends Taggable, Serializable{
*/ */
int getMeta(); int getMeta();
int getLight();
void setLight(int light);
/** /**
* Getting block type * Getting block type
*/ */

View File

@@ -4,21 +4,25 @@ import mc.core.Location;
public class BlockFactory { 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) { 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) { public Block create(BlockType blockType) {
return create(blockType, 0); return create(blockType, 0, 0, 0, 0);
} }
/** /**
* For first-time generation * For first-time generation
*/ */
private class EmbeddedBlock extends AbstractBlock { 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(type, meta);
super.setLocation(new Location(0,0,0)); super.setLocation(new Location(x,y,z));
} }
} }
} }

View File

@@ -1,16 +1,16 @@
package mc.core.block; package mc.core.world.block;
import lombok.Getter; import lombok.Getter;
public enum BlockType { public enum BlockType {
AIR(0, "Air"),
STONE(1, "Stone"), STONE(1, "Stone"),
GRASS(2, "Grass"), GRASS(2, "Grass"),
DIRT(3, "Dirt"), DIRT(3, "Dirt"),
BEDROCK(7, "Bedrock"), BEDROCK(7, "Bedrock"),
WATER(8, "Water"), WATER(8, "Water"),
SAND(12, "Sand"), SAND(12, "Sand"),
SNOW(32, "Snow"), SNOW(32, "Snow");
AIR(0, "Air");
@Getter @Getter
private final int id; private final int id;

View File

@@ -2,9 +2,10 @@
* DmitriyMX <dimon550@gmail.com> * DmitriyMX <dimon550@gmail.com>
* 2018-04-15 * 2018-04-15
*/ */
package mc.core.world; package mc.core.world.chunk;
import mc.core.Location; import mc.core.Location;
import mc.core.world.Biome;
import mc.core.world.block.Block; import mc.core.world.block.Block;
import java.io.Serializable; import java.io.Serializable;

View File

@@ -1,4 +1,4 @@
package mc.core.world; package mc.core.world.chunk;
import java.util.Optional; import java.util.Optional;

View File

@@ -11,21 +11,24 @@ import mc.core.Location;
import mc.core.WarpPosition; import mc.core.WarpPosition;
import mc.core.player.Look; import mc.core.player.Look;
import mc.core.world.*; import mc.core.world.*;
import mc.core.world.chunk.Chunk;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Stream; import java.util.stream.Stream;
public class FlatWorld implements World { public class FlatWorld implements World {
@Getter@Setter @Getter
@Setter
private UUID worldId = UUID.fromString("00000000-0000-0000-C000-000000000046"); private UUID worldId = UUID.fromString("00000000-0000-0000-C000-000000000046");
@Getter@Setter @Getter
@Setter
private String name; private String name;
@Getter @Getter
@Setter @Setter
private WarpPosition spawn = new WarpPosition(new Location(0, 6, 0), new Look(0, 0)); 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 @Override
public IWorldType getWorldType() { public IWorldType getWorldType() {
@@ -49,7 +52,7 @@ public class FlatWorld implements World {
@Override @Override
public void setRegion(int x, int z, Region region) { public void setRegion(int x, int z, Region region) {
throw new UnsupportedOperationException();
} }
@Override @Override

View File

@@ -2,16 +2,18 @@ package mc.world.generated_world.chunk;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import mc.core.block.Block; import mc.core.world.block.Block;
import mc.core.block.BlockType; import mc.core.world.block.BlockFactory;
import mc.core.world.block.BlockType;
import mc.core.world.Biome; import mc.core.world.Biome;
import mc.core.world.Chunk; import mc.core.world.chunk.Chunk;
import mc.core.world.Region; import mc.core.world.Region;
import static mc.world.generated_world.WorldConstants.WORLD_CHUNK_SIZE; import static mc.world.generated_world.WorldConstants.WORLD_CHUNK_SIZE;
@RequiredArgsConstructor @RequiredArgsConstructor
public class ChunkImpl implements Chunk{ public class ChunkImpl implements Chunk{
private static final BlockFactory blockFactory = new BlockFactory();
@Getter @Getter
private final int x; private final int x;
@Getter @Getter
@@ -22,33 +24,25 @@ public class ChunkImpl implements Chunk{
private final transient Region region; private final transient Region region;
@Override @Override
public int getBlockType(int x, int y, int z) { public Block getBlock(int x, int y, int z) {
return blocks[x][y][z].getId(); Block block = blocks[x][y][z];
if (block == null) {
block = blockFactory.create(BlockType.AIR, 0, x, y, z);
}
block.setLight(15);
return block;
} }
@Override @Override
public void setBlockType(int x, int y, int z, int type) { 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()]
@Override [block.getLocation().getBlockY()]
public int getBlockMetadata(int x, int y, int z) { [block.getLocation().getBlockZ()] = block;
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) {
} }
@Override @Override
@@ -58,7 +52,7 @@ public class ChunkImpl implements Chunk{
@Override @Override
public void setSkyLight(int x, int y, int z, int lightLevel) { public void setSkyLight(int x, int y, int z, int lightLevel) {
throw new UnsupportedOperationException();
} }
@Override @Override
@@ -68,7 +62,7 @@ public class ChunkImpl implements Chunk{
@Override @Override
public void setAddition(int x, int y, int z, int value) { public void setAddition(int x, int y, int z, int value) {
throw new UnsupportedOperationException();
} }
@Override @Override
@@ -80,21 +74,4 @@ public class ChunkImpl implements Chunk{
public void setBiome(int x, int z, Biome biome) { public void setBiome(int x, int z, Biome biome) {
region.setBiome(x + this.x * WORLD_CHUNK_SIZE,z + this.z * WORLD_CHUNK_SIZE, 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];
}
} }

View File

@@ -1,8 +1,8 @@
package mc.world.generated_world.chunk; 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.Biome;
import mc.core.world.Chunk; import mc.core.world.chunk.Chunk;
import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -29,39 +29,15 @@ public class ChunkProxy implements Chunk {
} }
@Override @Override
public int getBlockType(int x, int y, int z) { public Block getBlock(int x, int y, int z) {
use(); use();
return chunk.getBlockType(x, y, z); return chunk.getBlock(x, y, z);
} }
@Override @Override
public void setBlockType(int x, int y, int z, int type) { public void setBlock(Block block) {
use(); use();
chunk.setBlockType(x, y, z, type); chunk.setBlock(block);
}
@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);
} }
@Override @Override
@@ -117,16 +93,4 @@ public class ChunkProxy implements Chunk {
use(); use();
return chunk.getZ(); 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);
}
} }

View File

@@ -3,6 +3,8 @@ package mc.world.generated_world.chunk;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import mc.core.serialization.Serializer; import mc.core.serialization.Serializer;
import mc.core.world.*; 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.ChunkReader;
import mc.world.generated_world.serialization.RegionReaderWriter; import mc.world.generated_world.serialization.RegionReaderWriter;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -2,9 +2,10 @@ package mc.world.generated_world.generator;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import mc.core.block.BlockFactory; import mc.core.world.block.BlockFactory;
import mc.core.block.BlockType; import mc.core.world.block.BlockType;
import mc.core.world.*; import mc.core.world.*;
import mc.core.world.chunk.Chunk;
import mc.world.generated_world.region.RegionImpl; import mc.world.generated_world.region.RegionImpl;
import mc.world.generated_world.serialization.ChunkSerializer; import mc.world.generated_world.serialization.ChunkSerializer;
import mc.world.generated_world.serialization.RegionReaderWriter; 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 ++) { for (int y = 0; y < WORLD_SEA_LEVEL; y ++) {
Chunk chunk = region.getChunkAt(x / 16, y / 16, z / 16); Chunk chunk = region.getChunkAt(x / 16, y / 16, z / 16);
if (y == 0) { 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; continue;
} }
if (y < heightMap[x][z]) { if (y < heightMap[x][z]) {
if (y < heightMap[x][z] - grassMap[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 { } 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 { } 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 { } else {
for (int y = 0; y < heightMap[x][z]; y++) { for (int y = 0; y < heightMap[x][z]; y++) {
Chunk chunk = region.getChunkAt(x / 16, y / 16, z / 16); Chunk chunk = region.getChunkAt(x / 16, y / 16, z / 16);
if (y == 0) { 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; continue;
} }
if (y < heightMap[x][z] - grassMap[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 { } else {
if (biomes[x][z] == Biome.DESERT || biomes[x][z] == Biome.DESERT_HILLS) { 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) { } 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 { } 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));
} }
} }
} }

View File

@@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j;
import mc.core.serialization.IRegionReaderWriter; import mc.core.serialization.IRegionReaderWriter;
import mc.core.serialization.Serializer; import mc.core.serialization.Serializer;
import mc.core.world.*; 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.InMemoryCacheChunkLoader;
import mc.world.generated_world.chunk.ChunkImpl; import mc.world.generated_world.chunk.ChunkImpl;
import mc.world.generated_world.chunk.ChunkProxy; import mc.world.generated_world.chunk.ChunkProxy;

View File

@@ -1,11 +1,11 @@
package mc.world.generated_world.serialization; package mc.world.generated_world.serialization;
import mc.core.block.Block; import mc.core.world.block.Block;
import mc.core.block.BlockFactory; import mc.core.world.block.BlockFactory;
import mc.core.block.BlockType; import mc.core.world.block.BlockType;
import mc.core.serialization.Deserializer; import mc.core.serialization.Deserializer;
import mc.core.serialization.Serializer; import mc.core.serialization.Serializer;
import mc.core.world.Chunk; import mc.core.world.chunk.Chunk;
/** /**
* Prototype * Prototype

View File

@@ -1,10 +1,9 @@
package mc.world.generated_world.serialization; package mc.world.generated_world.serialization;
import mc.core.Location; import mc.core.world.block.Block;
import mc.core.block.Block;
import mc.core.serialization.Deserializer; import mc.core.serialization.Deserializer;
import mc.core.serialization.IChunkReader; import mc.core.serialization.IChunkReader;
import mc.core.world.Chunk; import mc.core.world.chunk.Chunk;
import mc.core.world.Region; import mc.core.world.Region;
import mc.world.generated_world.chunk.ChunkImpl; import mc.world.generated_world.chunk.ChunkImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -41,8 +40,7 @@ public class ChunkReader implements IChunkReader{
blockBytes[1] = chunkBytes[1 + 3 * i]; blockBytes[1] = chunkBytes[1 + 3 * i];
blockBytes[2] = chunkBytes[2 + 3 * i]; blockBytes[2] = chunkBytes[2 + 3 * i];
Block block = blockDeserializer.deserialize(blockBytes); Block block = blockDeserializer.deserialize(blockBytes);
Location blockLocation = block.getLocation(); chunk.setBlock(block);
chunk.setBlock(blockLocation.getBlockX(), blockLocation.getBlockY(), blockLocation.getBlockZ(), block);
} }
return chunk; return chunk;
} }

View File

@@ -1,11 +1,11 @@
package mc.world.generated_world.serialization; package mc.world.generated_world.serialization;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import mc.core.block.Block; import mc.core.world.block.Block;
import mc.core.block.BlockFactory; import mc.core.world.block.BlockFactory;
import mc.core.block.BlockType; import mc.core.world.block.BlockType;
import mc.core.serialization.Serializer; import mc.core.serialization.Serializer;
import mc.core.world.Chunk; import mc.core.world.chunk.Chunk;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;

View File

@@ -6,9 +6,9 @@ import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import mc.core.Location; import mc.core.Location;
import mc.core.WarpPosition; import mc.core.WarpPosition;
import mc.core.block.BlockType; import mc.core.world.block.BlockType;
import mc.core.player.Look; 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.IWorldType;
import mc.core.world.Region; import mc.core.world.Region;
import mc.core.world.World; import mc.core.world.World;

View File

@@ -8,14 +8,12 @@ import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import mc.core.Location;
import mc.core.network.NetOutputStream; import mc.core.network.NetOutputStream;
import mc.core.network.SCPacket; import mc.core.network.SCPacket;
import mc.core.network.proto_1_12_2.ByteArrayOutputNetStream; import mc.core.network.proto_1_12_2.ByteArrayOutputNetStream;
import mc.core.world.Block; import mc.core.world.block.Block;
import mc.core.world.Chunk; import mc.core.world.chunk.Chunk;
import java.io.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -80,8 +78,8 @@ public class ChunkDataPacket implements SCPacket {
@Getter @Getter
private List<Chunk> chunks = new ArrayList<>(); private List<Chunk> chunks = new ArrayList<>();
private int serializeBlockState(int id, int state) { private int serializeBlockState(int id, int meta) {
return (id << 4) | state; return (id << 4) | meta;
} }
@Override @Override
@@ -115,7 +113,7 @@ public class ChunkDataPacket implements SCPacket {
for (int z = 0; z < 16; z++) { for (int z = 0; z < 16; z++) {
for (int x = 0; x < 16; x++) { for (int x = 0; x < 16; x++) {
Block block = chunk.getBlock(x, y, z); Block block = chunk.getBlock(x, y, z);
int blockState = serializeBlockState(block.getId(), block.getState()); int blockState = serializeBlockState(block.getId(), block.getMeta());
int currentIndexPaletteBlock; int currentIndexPaletteBlock;
if (!palette.contains(blockState)) { if (!palette.contains(blockState)) {
@@ -151,7 +149,7 @@ public class ChunkDataPacket implements SCPacket {
} }
if (!biomeFinally) { if (!biomeFinally) {
biomes.writeByte(chunk.getBiome(x, z)); biomes.writeByte(chunk.getBiome(x, z).getId());
if (x == 15 && z == 15) { if (x == 15 && z == 15) {
biomeFinally = true; biomeFinally = true;
} }

View File

@@ -48,7 +48,7 @@ public class LoginHandler extends AbstractStateHandler implements LoginStateHand
Player player = playerManager.getPlayer(packet.getPlayerName()) Player player = playerManager.getPlayer(packet.getPlayerName())
.orElseGet(() -> playerManager.createPlayer( .orElseGet(() -> playerManager.createPlayer(
packet.getPlayerName(), packet.getPlayerName(),
world.getSpawn(), world.getSpawn().getLocation(),
new Look(0f, 0f))); new Look(0f, 0f)));
channel.writeAndFlush(new LoginSuccessPacket( channel.writeAndFlush(new LoginSuccessPacket(
@@ -68,7 +68,7 @@ public class LoginHandler extends AbstractStateHandler implements LoginStateHand
// Spawn Position // Spawn Position
SpawnPositionPacket pkt2 = new SpawnPositionPacket(); SpawnPositionPacket pkt2 = new SpawnPositionPacket();
pkt2.setLocation(world.getSpawn()); pkt2.setLocation(world.getSpawn().getLocation());
channel.write(pkt2); channel.write(pkt2);
// Player Abilities // Player Abilities
@@ -80,22 +80,14 @@ public class LoginHandler extends AbstractStateHandler implements LoginStateHand
channel.write(pkt3); channel.write(pkt3);
channel.flush(); channel.flush();
// Send chunk data // One Chunk
ChunkDataPacket pkt8 = new ChunkDataPacket(); ChunkDataPacket pkt8 = new ChunkDataPacket();
pkt8.setX(0); pkt8.setX(0);
pkt8.setZ(0); pkt8.setZ(0);
pkt8.getChunks().add(world.getChunk(0,0)); pkt8.getChunks().add(world.getChunk(0, 0,0));
pkt8.setInitChunk(true); pkt8.setInitChunk(true);
channel.writeAndFlush(pkt8); 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 // Player Position And Look
PlayerPositionAndLookPacket pkt4 = new PlayerPositionAndLookPacket(); PlayerPositionAndLookPacket pkt4 = new PlayerPositionAndLookPacket();
pkt4.setLocation(player.getLocation()); pkt4.setLocation(player.getLocation());

View File

@@ -5,5 +5,5 @@ include('flat_world')
include('vanilla_commands') include('vanilla_commands')
include('proto_1.12.2') // Protocol 1.12.2 include('proto_1.12.2') // Protocol 1.12.2
include('proto_1.12.2_netty') // Protocol 1.12.2 (Netty impl.) include('proto_1.12.2_netty') // Protocol 1.12.2 (Netty impl.)
include 'generated_world' include('generated_world')