Chunk Allocation and Data
This commit is contained in:
@@ -17,6 +17,10 @@ public class PacketEncoder extends MessageToByteEncoder<SCPacket> {
|
||||
protected void encode(ChannelHandlerContext ctx, SCPacket pkt, ByteBuf out) throws Exception {
|
||||
log.debug("{}: {}", pkt.getClass().getSimpleName(), pkt.toString());
|
||||
Integer id = PacketManager.getServirSidePacket(pkt.getClass());
|
||||
if (id == null) {
|
||||
log.warn("Not defined ID packet \"{}\"", pkt.getClass().getSimpleName());
|
||||
return;
|
||||
}
|
||||
byte[] bytes = pkt.toByteArray();
|
||||
|
||||
out.writeByte(id);
|
||||
|
||||
@@ -93,6 +93,48 @@ public class PacketHandler extends SimpleChannelInboundHandler<CSPacket> {
|
||||
infoPkt.setPing(4);
|
||||
channel.write(infoPkt);
|
||||
|
||||
// send Chunk allocation
|
||||
ChunkAllocationPacket chInitPkt = new ChunkAllocationPacket();
|
||||
chInitPkt.setX(0);
|
||||
chInitPkt.setZ(0);
|
||||
chInitPkt.setInitChunk(true);
|
||||
channel.write(chInitPkt);
|
||||
|
||||
for (int x = -17; x <= 17; x++) {
|
||||
for (int z = -17; z <= 17; z++) {
|
||||
if (x == 0 && z == 0) continue;
|
||||
|
||||
chInitPkt = new ChunkAllocationPacket();
|
||||
chInitPkt.setX(x);
|
||||
chInitPkt.setZ(z);
|
||||
chInitPkt.setInitChunk(true);
|
||||
channel.write(chInitPkt);
|
||||
}
|
||||
}
|
||||
|
||||
// send Chunk data
|
||||
ChunkDataPacket chDataPkt = new ChunkDataPacket();
|
||||
chDataPkt.setX(0);
|
||||
chDataPkt.setZ(0);
|
||||
chDataPkt.setNeedInitChunk(false);
|
||||
chDataPkt.setYMin(0);
|
||||
chDataPkt.setYMax(0);
|
||||
channel.write(chDataPkt);
|
||||
|
||||
for (int x = -17; x <= 17; x++) {
|
||||
for (int z = -17; z <= 17; z++) {
|
||||
if (x == 0 && z == 0) continue;
|
||||
|
||||
chDataPkt = new ChunkDataPacket();
|
||||
chDataPkt.setX(x);
|
||||
chDataPkt.setZ(z);
|
||||
chDataPkt.setNeedInitChunk(false);
|
||||
chDataPkt.setYMin(0);
|
||||
chDataPkt.setYMax(0);
|
||||
channel.write(chDataPkt);
|
||||
}
|
||||
}
|
||||
|
||||
// send Position and look
|
||||
PositionAndLookPacket posLookPkt = new PositionAndLookPacket();
|
||||
posLookPkt.setLocation(spawnLoc);
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* DmitriyMX <dimon550@gmail.com>
|
||||
* 2018-04-20
|
||||
*/
|
||||
package mc.core.network.proto_125.packets;
|
||||
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
import mc.core.network.SCPacket;
|
||||
import mc.core.network.proto_125.ByteArrayOutputNetStream;
|
||||
|
||||
@Setter
|
||||
@ToString
|
||||
public class ChunkAllocationPacket implements SCPacket {
|
||||
private int x, z;
|
||||
private boolean initChunk;
|
||||
|
||||
@Override
|
||||
public byte[] toByteArray() {
|
||||
ByteArrayOutputNetStream netStream = new ByteArrayOutputNetStream();
|
||||
|
||||
netStream.writeInt(x);
|
||||
netStream.writeInt(z);
|
||||
netStream.writeBoolean(initChunk);
|
||||
|
||||
return netStream.toByteArray();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* DmitriyMX <dimon550@gmail.com>
|
||||
* 2018-04-20
|
||||
*/
|
||||
package mc.core.network.proto_125.packets;
|
||||
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
import mc.core.network.SCPacket;
|
||||
import mc.core.network.proto_125.ByteArrayOutputNetStream;
|
||||
|
||||
import java.util.zip.Deflater;
|
||||
|
||||
@Setter
|
||||
@ToString
|
||||
public class ChunkDataPacket implements SCPacket {
|
||||
private static final byte[] data = new byte[65536 + 32768 + 32768 + 32768/* + 0*/ + 256];
|
||||
private static byte[] compressData = null;
|
||||
|
||||
private int x, z;
|
||||
private boolean needInitChunk;
|
||||
private int yMin,yMax;
|
||||
|
||||
@Override
|
||||
public byte[] toByteArray() {
|
||||
if (compressData == null) {
|
||||
Deflater zlib = new Deflater();
|
||||
zlib.setInput(data);
|
||||
byte[] preCompress = new byte[data.length];
|
||||
int len = zlib.deflate(preCompress);
|
||||
|
||||
compressData = new byte[len];
|
||||
System.arraycopy(preCompress, 0, compressData, 0, len);
|
||||
}
|
||||
|
||||
ByteArrayOutputNetStream netStream = new ByteArrayOutputNetStream();
|
||||
|
||||
netStream.writeInt(x);
|
||||
netStream.writeInt(z);
|
||||
netStream.writeBoolean(needInitChunk);
|
||||
netStream.writeShort(yMin);
|
||||
netStream.writeShort(yMax);
|
||||
netStream.writeInt(compressData.length);
|
||||
netStream.writeInt(0);
|
||||
netStream.writeBytes(compressData);
|
||||
|
||||
return netStream.toByteArray();
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,8 @@ public class PacketManager {
|
||||
.put(0x02, HandshakePacket.class)
|
||||
.put(0x06, SpawnPositionPacket.class)
|
||||
.put(0x0D, PositionAndLookPacket.class)
|
||||
.put(0x32, ChunkAllocationPacket.class)
|
||||
.put(0x33, ChunkDataPacket.class)
|
||||
.put(0xC9, PlayerInfoPacket.class)
|
||||
.put(0xCA, PlayerAbilitiesPacket.class)
|
||||
.put(0xFE, PingPacket.class)
|
||||
|
||||
Reference in New Issue
Block a user