refactoring
This commit is contained in:
@@ -3,19 +3,24 @@ package mc.protocol.handler.codec;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.handler.codec.ByteToMessageDecoder;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import mc.protocol.ProtocolAttributes;
|
||||
import mc.protocol.State;
|
||||
import mc.protocol.buffer.NetByteBuf;
|
||||
import mc.protocol.packets.ClientSidePacket;
|
||||
import mc.protocol.packets.UnknownPacket;
|
||||
import mc.protocol.pool.PacketObjectPool;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class ProtocolDecoder extends ByteToMessageDecoder {
|
||||
|
||||
private final boolean readUnknownPackets;
|
||||
|
||||
@Override
|
||||
public void channelActive(ChannelHandlerContext ctx) {
|
||||
ctx.channel().attr(ProtocolAttributes.STATE).set(State.HANDSHAKING);
|
||||
@@ -30,7 +35,17 @@ public class ProtocolDecoder extends ByteToMessageDecoder {
|
||||
Class<? extends ClientSidePacket> packetClass = state.getClientSidePacketById(packetId);
|
||||
if (packetClass == null) {
|
||||
log.warn("Unknown packet: State {} ; Id 0x{}", state, packetIdAsHexcode(packetId));
|
||||
netByteBuf.skipBytes(netByteBuf.readableBytes());
|
||||
|
||||
if (readUnknownPackets) {
|
||||
UnknownPacket unknownPacket = new UnknownPacket();
|
||||
unknownPacket.setState(state);
|
||||
unknownPacket.setId(packetId);
|
||||
unknownPacket.setDataSize(netByteBuf.readableBytes());
|
||||
unknownPacket.readSelf(netByteBuf);
|
||||
out.add(unknownPacket);
|
||||
} else {
|
||||
netByteBuf.skipBytes(netByteBuf.readableBytes());
|
||||
}
|
||||
} else {
|
||||
ClientSidePacket packet = PacketObjectPool.getInstance().getPool(packetClass).borrowObject();
|
||||
packet.readSelf(netByteBuf);
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package mc.protocol.packets;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
import mc.protocol.State;
|
||||
import mc.protocol.buffer.NetByteBuf;
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
@ToString(exclude = "rawData")
|
||||
public class UnknownPacket implements ClientSidePacket {
|
||||
|
||||
private State state;
|
||||
private int id;
|
||||
private int dataSize;
|
||||
private byte[] rawData;
|
||||
|
||||
@Override
|
||||
public void readSelf(NetByteBuf netByteBuf) {
|
||||
rawData = new byte[dataSize];
|
||||
netByteBuf.readBytes(rawData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void passivate() {
|
||||
this.state = null;
|
||||
this.id = 0;
|
||||
this.dataSize = 0;
|
||||
this.rawData = null;
|
||||
}
|
||||
}
|
||||
7
protocol-new/src/main/java/mc/protocol/world/Chunk.java
Normal file
7
protocol-new/src/main/java/mc/protocol/world/Chunk.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package mc.protocol.world;
|
||||
|
||||
public interface Chunk {
|
||||
|
||||
int getX();
|
||||
int getZ();
|
||||
}
|
||||
13
protocol-new/src/main/java/mc/protocol/world/World.java
Normal file
13
protocol-new/src/main/java/mc/protocol/world/World.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package mc.protocol.world;
|
||||
|
||||
import mc.protocol.model.Location;
|
||||
import mc.protocol.utils.LevelType;
|
||||
|
||||
public interface World {
|
||||
|
||||
LevelType getLevelType();
|
||||
|
||||
Location getSpawn();
|
||||
|
||||
Chunk getChunk(int x, int z);
|
||||
}
|
||||
Reference in New Issue
Block a user