небольшой рефакторинг классов
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
package mc.protocol;
|
package mc.protocol;
|
||||||
|
|
||||||
|
import mc.protocol.io.NetInputStream;
|
||||||
|
import mc.protocol.io.NetOutputStream;
|
||||||
|
|
||||||
public interface Packet {
|
public interface Packet {
|
||||||
|
|
||||||
void readSelf(NetInputStream netInputStream);
|
void readSelf(NetInputStream netInputStream);
|
||||||
|
|||||||
@@ -2,10 +2,8 @@ package mc.protocol;
|
|||||||
|
|
||||||
import com.google.common.collect.BiMap;
|
import com.google.common.collect.BiMap;
|
||||||
import com.google.common.collect.ImmutableBiMap;
|
import com.google.common.collect.ImmutableBiMap;
|
||||||
import lombok.AccessLevel;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.Setter;
|
|
||||||
import mc.protocol.handshake.client.HandshakePacket;
|
import mc.protocol.handshake.client.HandshakePacket;
|
||||||
import mc.protocol.status.client.StatusServerRequest;
|
import mc.protocol.status.client.StatusServerRequest;
|
||||||
import mc.protocol.status.server.StatusServerResponse;
|
import mc.protocol.status.server.StatusServerResponse;
|
||||||
@@ -13,20 +11,23 @@ import mc.protocol.status.server.StatusServerResponse;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public enum State {
|
public enum State {
|
||||||
|
|
||||||
HANDSHAKING(-1){{
|
HANDSHAKING(-1,
|
||||||
setServerBoundPackets(ImmutableBiMap.of(
|
// server bound
|
||||||
0x00, HandshakePacket.class
|
ImmutableBiMap.of(
|
||||||
));
|
0x00, HandshakePacket.class
|
||||||
}},
|
)
|
||||||
|
),
|
||||||
PLAY(0),
|
PLAY(0),
|
||||||
STATUS(1){{
|
STATUS(1,
|
||||||
setServerBoundPackets(ImmutableBiMap.of(
|
// server bound
|
||||||
0x00, StatusServerRequest.class
|
ImmutableBiMap.of(
|
||||||
));
|
0x00, StatusServerRequest.class
|
||||||
setClientBoundPackets(ImmutableBiMap.of(
|
),
|
||||||
0x00, StatusServerResponse.class
|
// client bound
|
||||||
));
|
ImmutableBiMap.of(
|
||||||
}},
|
0x00, StatusServerResponse.class
|
||||||
|
)
|
||||||
|
),
|
||||||
LOGIN(2);
|
LOGIN(2);
|
||||||
|
|
||||||
public static State getById(int id) {
|
public static State getById(int id) {
|
||||||
@@ -42,11 +43,20 @@ public enum State {
|
|||||||
@Getter
|
@Getter
|
||||||
private final int id;
|
private final int id;
|
||||||
|
|
||||||
@Setter(value = AccessLevel.PROTECTED)
|
private BiMap<Integer, Class<? extends Packet>> serverBoundPackets;
|
||||||
|
|
||||||
private BiMap<Integer, Class<? extends Packet>> clientBoundPackets;
|
private BiMap<Integer, Class<? extends Packet>> clientBoundPackets;
|
||||||
|
|
||||||
@Setter(value = AccessLevel.PROTECTED)
|
State(int id, BiMap<Integer, Class<? extends Packet>> serverBoundPackets) {
|
||||||
private BiMap<Integer, Class<? extends Packet>> serverBoundPackets;
|
this.id = id;
|
||||||
|
this.serverBoundPackets = serverBoundPackets;
|
||||||
|
}
|
||||||
|
|
||||||
|
State(int id, BiMap<Integer, Class<? extends Packet>> serverBoundPackets, BiMap<Integer, Class<? extends Packet>> clientBoundPackets) {
|
||||||
|
this.id = id;
|
||||||
|
this.serverBoundPackets = serverBoundPackets;
|
||||||
|
this.clientBoundPackets = clientBoundPackets;
|
||||||
|
}
|
||||||
|
|
||||||
public Class<? extends Packet> getPacketById(PacketDirection direction, int id) {
|
public Class<? extends Packet> getPacketById(PacketDirection direction, int id) {
|
||||||
if (direction == PacketDirection.CLIENT_BOUND) {
|
if (direction == PacketDirection.CLIENT_BOUND) {
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package mc.protocol.handshake.client;
|
package mc.protocol.handshake.client;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import mc.protocol.NetInputStream;
|
|
||||||
import mc.protocol.NetOutputStream;
|
|
||||||
import mc.protocol.Packet;
|
import mc.protocol.Packet;
|
||||||
import mc.protocol.State;
|
import mc.protocol.State;
|
||||||
|
import mc.protocol.io.NetInputStream;
|
||||||
|
import mc.protocol.io.NetOutputStream;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class HandshakePacket implements Packet {
|
public class HandshakePacket implements Packet {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package mc.protocol;
|
package mc.protocol.io;
|
||||||
|
|
||||||
public class DecoderException extends RuntimeException {
|
public class DecoderException extends RuntimeException {
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package mc.protocol;
|
package mc.protocol.io;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -39,7 +39,7 @@ public abstract class NetInputStream extends InputStream {
|
|||||||
if (length == 0) {
|
if (length == 0) {
|
||||||
return "";
|
return "";
|
||||||
} else if (length > maxLength) {
|
} else if (length > maxLength) {
|
||||||
throw new DecoderException("String length exceeds maximum length: " + length + " > " + maxLength);
|
throw new DecoderException("String length exceeds maximum length: " + length + " > " + maxLength);
|
||||||
} else if (length < 0) {
|
} else if (length < 0) {
|
||||||
throw new DecoderException("String length less zero!");
|
throw new DecoderException("String length less zero!");
|
||||||
}
|
}
|
||||||
@@ -101,6 +101,8 @@ public abstract class NetInputStream extends InputStream {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public abstract byte readByte();
|
public abstract byte readByte();
|
||||||
|
|
||||||
public abstract int readBytes(byte[] buffer, int offset, int lengtn);
|
public abstract int readBytes(byte[] buffer, int offset, int lengtn);
|
||||||
|
|
||||||
public abstract int readShort();
|
public abstract int readShort();
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package mc.protocol;
|
package mc.protocol.io;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
@@ -84,6 +84,8 @@ public abstract class NetOutputStream extends OutputStream {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public abstract void writeByte(int value);
|
public abstract void writeByte(int value);
|
||||||
|
|
||||||
public abstract void writeBytes(byte[] buffer, int offset, int lengtn);
|
public abstract void writeBytes(byte[] buffer, int offset, int lengtn);
|
||||||
|
|
||||||
public abstract void writeShort(int value);
|
public abstract void writeShort(int value);
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package mc.protocol.coder;
|
package mc.protocol.io.coder;
|
||||||
|
|
||||||
import mc.protocol.NetOutputStream;
|
import mc.protocol.io.NetOutputStream;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package mc.protocol.coder;
|
package mc.protocol.io.coder;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Packet format:
|
Packet format:
|
||||||
@@ -13,10 +13,10 @@ https://wiki.vg/index.php?title=Protocol&oldid=7368#Without_compression
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import mc.protocol.NetInputStream;
|
|
||||||
import mc.protocol.Packet;
|
import mc.protocol.Packet;
|
||||||
import mc.protocol.PacketDirection;
|
import mc.protocol.PacketDirection;
|
||||||
import mc.protocol.State;
|
import mc.protocol.State;
|
||||||
|
import mc.protocol.io.NetInputStream;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
package mc.protocol.coder;
|
package mc.protocol.io.coder;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import mc.protocol.*;
|
import mc.protocol.Packet;
|
||||||
|
import mc.protocol.PacketDirection;
|
||||||
|
import mc.protocol.State;
|
||||||
|
import mc.protocol.io.NetOutputStream;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package mc.protocol.status.client;
|
package mc.protocol.status.client;
|
||||||
|
|
||||||
import mc.protocol.NetInputStream;
|
|
||||||
import mc.protocol.NetOutputStream;
|
|
||||||
import mc.protocol.Packet;
|
import mc.protocol.Packet;
|
||||||
|
import mc.protocol.io.NetInputStream;
|
||||||
|
import mc.protocol.io.NetOutputStream;
|
||||||
|
|
||||||
public class StatusServerRequest implements Packet {
|
public class StatusServerRequest implements Packet {
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package mc.protocol.status.server;
|
package mc.protocol.status.server;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import mc.protocol.NetInputStream;
|
|
||||||
import mc.protocol.NetOutputStream;
|
|
||||||
import mc.protocol.Packet;
|
import mc.protocol.Packet;
|
||||||
|
import mc.protocol.io.NetInputStream;
|
||||||
|
import mc.protocol.io.NetOutputStream;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class StatusServerResponse implements Packet {
|
public class StatusServerResponse implements Packet {
|
||||||
|
|||||||
Reference in New Issue
Block a user