mirror of
https://github.com/Nan1t/NanoLimbo.git
synced 2026-02-11 03:16:14 +01:00
Finished basic connection process
This commit is contained in:
@@ -4,8 +4,8 @@ import ru.nanit.limbo.protocol.registry.Version;
|
||||
|
||||
public interface Packet {
|
||||
|
||||
void encode(ByteMessage msg, Direction direction, Version version);
|
||||
void encode(ByteMessage msg, Version version);
|
||||
|
||||
void decode(ByteMessage msg, Direction direction, Version version);
|
||||
void decode(ByteMessage msg, Version version);
|
||||
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import ru.nanit.limbo.protocol.registry.Version;
|
||||
public interface PacketIn extends Packet {
|
||||
|
||||
@Override
|
||||
default void encode(ByteMessage msg, Direction direction, Version version) {
|
||||
default void encode(ByteMessage msg, Version version) {
|
||||
// Can be ignored for incoming packets
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import ru.nanit.limbo.protocol.registry.Version;
|
||||
public interface PacketOut extends Packet {
|
||||
|
||||
@Override
|
||||
default void decode(ByteMessage msg, Direction direction, Version version) {
|
||||
default void decode(ByteMessage msg, Version version) {
|
||||
// Can be ignored for outgoing packets
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ package ru.nanit.limbo.protocol.packets;
|
||||
|
||||
import ru.nanit.limbo.protocol.ByteMessage;
|
||||
import ru.nanit.limbo.protocol.Packet;
|
||||
import ru.nanit.limbo.protocol.Direction;
|
||||
import ru.nanit.limbo.protocol.registry.Version;
|
||||
|
||||
public class PacketHandshake implements Packet {
|
||||
@@ -45,7 +44,7 @@ public class PacketHandshake implements Packet {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void encode(ByteMessage msg, Direction direction, Version version) {
|
||||
public void encode(ByteMessage msg, Version version) {
|
||||
msg.writeVarInt(this.version.getProtocolNumber());
|
||||
msg.writeString(host);
|
||||
msg.writeShort(port);
|
||||
@@ -53,7 +52,7 @@ public class PacketHandshake implements Packet {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decode(ByteMessage msg, Direction direction, Version version) {
|
||||
public void decode(ByteMessage msg, Version version) {
|
||||
this.version = Version.of(msg.readVarInt());
|
||||
this.host = msg.readString();
|
||||
this.port = msg.readUnsignedShort();
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package ru.nanit.limbo.protocol.packets.login;
|
||||
|
||||
import ru.nanit.limbo.protocol.ByteMessage;
|
||||
import ru.nanit.limbo.protocol.Direction;
|
||||
import ru.nanit.limbo.protocol.PacketOut;
|
||||
import ru.nanit.limbo.protocol.registry.Version;
|
||||
|
||||
@@ -14,7 +13,7 @@ public class PacketDisconnect implements PacketOut {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void encode(ByteMessage msg, Direction direction, Version version) {
|
||||
public void encode(ByteMessage msg, Version version) {
|
||||
msg.writeString(String.format("{\"text\": \"%s\"}", reason));
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ public class PacketLoginStart implements PacketIn {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decode(ByteMessage msg, Direction direction, Version version) {
|
||||
public void decode(ByteMessage msg, Version version) {
|
||||
this.username = msg.readString();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package ru.nanit.limbo.protocol.packets.login;
|
||||
|
||||
import ru.nanit.limbo.protocol.ByteMessage;
|
||||
import ru.nanit.limbo.protocol.Direction;
|
||||
import ru.nanit.limbo.protocol.PacketOut;
|
||||
import ru.nanit.limbo.protocol.registry.Version;
|
||||
|
||||
@@ -21,7 +20,7 @@ public class PacketLoginSuccess implements PacketOut {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void encode(ByteMessage msg, Direction direction, Version version) {
|
||||
public void encode(ByteMessage msg, Version version) {
|
||||
msg.writeUuid(uuid);
|
||||
msg.writeString(username);
|
||||
}
|
||||
|
||||
@@ -2,20 +2,16 @@ package ru.nanit.limbo.protocol.packets.play;
|
||||
|
||||
import net.kyori.adventure.nbt.CompoundBinaryTag;
|
||||
import ru.nanit.limbo.protocol.ByteMessage;
|
||||
import ru.nanit.limbo.protocol.Direction;
|
||||
import ru.nanit.limbo.protocol.PacketOut;
|
||||
import ru.nanit.limbo.protocol.registry.Version;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PacketJoinGame implements PacketOut {
|
||||
|
||||
private int entityId;
|
||||
private boolean isHardcore = false;
|
||||
private int gameMode = 2;
|
||||
private int previousGameMode = -1;
|
||||
private int worldCount = 1;
|
||||
private List<String> worldNames;
|
||||
private String[] worldNames;
|
||||
private CompoundBinaryTag dimensionCodec;
|
||||
private CompoundBinaryTag dimension;
|
||||
private String worldName;
|
||||
@@ -43,11 +39,7 @@ public class PacketJoinGame implements PacketOut {
|
||||
this.previousGameMode = previousGameMode;
|
||||
}
|
||||
|
||||
public void setWorldCount(int worldCount) {
|
||||
this.worldCount = worldCount;
|
||||
}
|
||||
|
||||
public void setWorldNames(List<String> worldNames) {
|
||||
public void setWorldNames(String... worldNames) {
|
||||
this.worldNames = worldNames;
|
||||
}
|
||||
|
||||
@@ -92,8 +84,22 @@ public class PacketJoinGame implements PacketOut {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void encode(ByteMessage msg, Direction direction, Version version) {
|
||||
|
||||
public void encode(ByteMessage msg, Version version) {
|
||||
msg.writeInt(entityId);
|
||||
msg.writeBoolean(isHardcore);
|
||||
msg.writeByte(gameMode);
|
||||
msg.writeByte(previousGameMode);
|
||||
msg.writeStringsArray(worldNames);
|
||||
msg.writeCompoundTag(dimensionCodec);
|
||||
msg.writeCompoundTag(dimension);
|
||||
msg.writeString(worldName);
|
||||
msg.writeLong(hashedSeed);
|
||||
msg.writeVarInt(maxPlayers);
|
||||
msg.writeVarInt(viewDistance);
|
||||
msg.writeBoolean(reducedDebugInfo);
|
||||
msg.writeBoolean(enableRespawnScreen);
|
||||
msg.writeBoolean(isDebug);
|
||||
msg.writeBoolean(isFlat);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
package ru.nanit.limbo.protocol.packets.play;
|
||||
|
||||
import ru.nanit.limbo.protocol.ByteMessage;
|
||||
import ru.nanit.limbo.protocol.PacketOut;
|
||||
import ru.nanit.limbo.protocol.registry.Version;
|
||||
|
||||
public class PacketPlayerPositionAndLook implements PacketOut {
|
||||
|
||||
private double x;
|
||||
private double y;
|
||||
private double z;
|
||||
private float yaw;
|
||||
private float pitch;
|
||||
private byte flags = 0x01;
|
||||
private int teleportId;
|
||||
|
||||
public void setX(double x) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
public void setY(double y) {
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public void setZ(double z) {
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public void setYaw(float yaw) {
|
||||
this.yaw = yaw;
|
||||
}
|
||||
|
||||
public void setPitch(float pitch) {
|
||||
this.pitch = pitch;
|
||||
}
|
||||
|
||||
public void setFlags(byte flags) {
|
||||
this.flags = flags;
|
||||
}
|
||||
|
||||
public void setTeleportId(int teleportId) {
|
||||
this.teleportId = teleportId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void encode(ByteMessage msg, Version version) {
|
||||
msg.writeDouble(x);
|
||||
msg.writeDouble(y);
|
||||
msg.writeDouble(z);
|
||||
msg.writeFloat(yaw);
|
||||
msg.writeFloat(pitch);
|
||||
msg.writeByte(flags);
|
||||
msg.writeVarInt(teleportId);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package ru.nanit.limbo.protocol.packets.play;
|
||||
|
||||
import ru.nanit.limbo.protocol.ByteMessage;
|
||||
import ru.nanit.limbo.protocol.PacketOut;
|
||||
import ru.nanit.limbo.protocol.registry.Version;
|
||||
|
||||
public class PacketUpdateViewPos implements PacketOut {
|
||||
|
||||
private int chunkX;
|
||||
private int chunkY;
|
||||
|
||||
public void setChunkX(int chunkX) {
|
||||
this.chunkX = chunkX;
|
||||
}
|
||||
|
||||
public void setChunkY(int chunkY) {
|
||||
this.chunkY = chunkY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void encode(ByteMessage msg, Version version) {
|
||||
msg.writeVarInt(chunkX);
|
||||
msg.writeVarInt(chunkY);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,7 +2,6 @@ package ru.nanit.limbo.protocol.packets.status;
|
||||
|
||||
import ru.nanit.limbo.protocol.ByteMessage;
|
||||
import ru.nanit.limbo.protocol.Packet;
|
||||
import ru.nanit.limbo.protocol.Direction;
|
||||
import ru.nanit.limbo.protocol.registry.Version;
|
||||
|
||||
public class PacketStatusPing implements Packet {
|
||||
@@ -10,12 +9,12 @@ public class PacketStatusPing implements Packet {
|
||||
private long randomId;
|
||||
|
||||
@Override
|
||||
public void encode(ByteMessage msg, Direction direction, Version version) {
|
||||
public void encode(ByteMessage msg, Version version) {
|
||||
msg.writeLong(randomId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decode(ByteMessage msg, Direction direction, Version version) {
|
||||
public void decode(ByteMessage msg, Version version) {
|
||||
this.randomId = msg.readLong();
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import ru.nanit.limbo.protocol.registry.Version;
|
||||
public class PacketStatusRequest implements PacketIn {
|
||||
|
||||
@Override
|
||||
public void decode(ByteMessage msg, Direction direction, Version version) {
|
||||
public void decode(ByteMessage msg, Version version) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ public class PacketStatusResponse implements PacketOut {
|
||||
private static final String TEMPLATE = "{ \"version\": { \"name\": \"%s\", \"protocol\": %d }, \"players\": { \"max\": %d, \"online\": %d, \"sample\": [] }, \"description\": %s }";
|
||||
|
||||
@Override
|
||||
public void encode(ByteMessage msg, Direction direction, Version version) {
|
||||
public void encode(ByteMessage msg, Version version) {
|
||||
String ver = LimboConfig.getPingData().getVersion();
|
||||
String desc = LimboConfig.getPingData().getDescription();
|
||||
String json = getResponseJson(ver, version.getProtocolNumber(), LimboConfig.getMaxPlayers(), 0, desc);
|
||||
|
||||
@@ -30,7 +30,7 @@ public class PacketDecoder extends MessageToMessageDecoder<ByteBuf> {
|
||||
|
||||
if (packet != null){
|
||||
try {
|
||||
packet.decode(msg, Direction.SERVER, mappings.getVersion());
|
||||
packet.decode(msg, mappings.getVersion());
|
||||
} catch (Exception e){
|
||||
Logger.warning("Cannot decode packet 0x%s: %s", Integer.toHexString(packetId), e.getMessage());
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.handler.codec.MessageToByteEncoder;
|
||||
import ru.nanit.limbo.protocol.ByteMessage;
|
||||
import ru.nanit.limbo.protocol.Packet;
|
||||
import ru.nanit.limbo.protocol.Direction;
|
||||
import ru.nanit.limbo.protocol.registry.Version;
|
||||
import ru.nanit.limbo.protocol.registry.State;
|
||||
import ru.nanit.limbo.util.Logger;
|
||||
@@ -35,7 +34,7 @@ public class PacketEncoder extends MessageToByteEncoder<Packet> {
|
||||
msg.writeVarInt(packetId);
|
||||
|
||||
try {
|
||||
packet.encode(msg, Direction.CLIENT, version);
|
||||
packet.encode(msg, version);
|
||||
} catch (Exception e){
|
||||
Logger.warning("Cannot encode packet 0x%s: %s", Integer.toHexString(packetId), e.getMessage());
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@ import ru.nanit.limbo.protocol.Packet;
|
||||
import ru.nanit.limbo.protocol.packets.*;
|
||||
import ru.nanit.limbo.protocol.packets.login.*;
|
||||
import ru.nanit.limbo.protocol.packets.play.PacketJoinGame;
|
||||
import ru.nanit.limbo.protocol.packets.play.PacketPlayerPositionAndLook;
|
||||
import ru.nanit.limbo.protocol.packets.play.PacketUpdateViewPos;
|
||||
import ru.nanit.limbo.protocol.packets.status.PacketStatusPing;
|
||||
import ru.nanit.limbo.protocol.packets.status.PacketStatusRequest;
|
||||
import ru.nanit.limbo.protocol.packets.status.PacketStatusResponse;
|
||||
@@ -37,6 +39,8 @@ public enum State {
|
||||
PLAY(3){
|
||||
{
|
||||
clientBound.register(Version.V1_16_4, 0x24, PacketJoinGame::new);
|
||||
clientBound.register(Version.V1_16_4, 0x34, PacketPlayerPositionAndLook::new);
|
||||
clientBound.register(Version.V1_16_4, 0x40, PacketUpdateViewPos::new);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user