This commit is contained in:
themode 2020-08-19 20:47:53 +02:00
parent c85e866e3c
commit b8c30d9b58
32 changed files with 194 additions and 186 deletions

View File

@ -6,12 +6,12 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class BooleanData extends DataType<Boolean> { public class BooleanData extends DataType<Boolean> {
@Override @Override
public void encode(BinaryWriter binaryWriter, Boolean value) { public void encode(BinaryWriter writer, Boolean value) {
binaryWriter.writeBoolean(value); writer.writeBoolean(value);
} }
@Override @Override
public Boolean decode(BinaryReader binaryReader) { public Boolean decode(BinaryReader reader) {
return binaryReader.readBoolean(); return reader.readBoolean();
} }
} }

View File

@ -6,12 +6,12 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class ByteData extends DataType<Byte> { public class ByteData extends DataType<Byte> {
@Override @Override
public void encode(BinaryWriter binaryWriter, Byte value) { public void encode(BinaryWriter writer, Byte value) {
binaryWriter.writeByte(value); writer.writeByte(value);
} }
@Override @Override
public Byte decode(BinaryReader binaryReader) { public Byte decode(BinaryReader reader) {
return binaryReader.readByte(); return reader.readByte();
} }
} }

View File

@ -7,12 +7,12 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class CharacterData extends DataType<Character> { public class CharacterData extends DataType<Character> {
@Override @Override
public void encode(BinaryWriter binaryWriter, Character value) { public void encode(BinaryWriter writer, Character value) {
binaryWriter.writeChar(value); writer.writeChar(value);
} }
@Override @Override
public Character decode(BinaryReader binaryReader) { public Character decode(BinaryReader reader) {
return binaryReader.readChar(); return reader.readChar();
} }
} }

View File

@ -7,12 +7,12 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class DoubleData extends DataType<Double> { public class DoubleData extends DataType<Double> {
@Override @Override
public void encode(BinaryWriter binaryWriter, Double value) { public void encode(BinaryWriter writer, Double value) {
binaryWriter.writeDouble(value); writer.writeDouble(value);
} }
@Override @Override
public Double decode(BinaryReader binaryReader) { public Double decode(BinaryReader reader) {
return binaryReader.readDouble(); return reader.readDouble();
} }
} }

View File

@ -7,12 +7,12 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class FloatData extends DataType<Float> { public class FloatData extends DataType<Float> {
@Override @Override
public void encode(BinaryWriter binaryWriter, Float value) { public void encode(BinaryWriter writer, Float value) {
binaryWriter.writeFloat(value); writer.writeFloat(value);
} }
@Override @Override
public Float decode(BinaryReader binaryReader) { public Float decode(BinaryReader reader) {
return binaryReader.readFloat(); return reader.readFloat();
} }
} }

View File

@ -7,12 +7,12 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class IntegerData extends DataType<Integer> { public class IntegerData extends DataType<Integer> {
@Override @Override
public void encode(BinaryWriter binaryWriter, Integer value) { public void encode(BinaryWriter writer, Integer value) {
binaryWriter.writeVarInt(value); writer.writeVarInt(value);
} }
@Override @Override
public Integer decode(BinaryReader binaryReader) { public Integer decode(BinaryReader reader) {
return binaryReader.readVarInt(); return reader.readVarInt();
} }
} }

View File

@ -9,31 +9,31 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class InventoryData extends DataType<Inventory> { public class InventoryData extends DataType<Inventory> {
@Override @Override
public void encode(BinaryWriter binaryWriter, Inventory value) { public void encode(BinaryWriter writer, Inventory value) {
final InventoryType inventoryType = value.getInventoryType(); final InventoryType inventoryType = value.getInventoryType();
final int size = inventoryType.getAdditionalSlot(); final int size = inventoryType.getAdditionalSlot();
// Inventory title & type // Inventory title & type
binaryWriter.writeSizedString(value.getTitle()); writer.writeSizedString(value.getTitle());
binaryWriter.writeSizedString(inventoryType.name()); writer.writeSizedString(inventoryType.name());
// Write all item stacks // Write all item stacks
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
binaryWriter.writeItemStack(value.getItemStack(i)); writer.writeItemStack(value.getItemStack(i));
} }
} }
@Override @Override
public Inventory decode(BinaryReader binaryReader) { public Inventory decode(BinaryReader reader) {
final String title = binaryReader.readSizedString(); final String title = reader.readSizedString();
final InventoryType inventoryType = InventoryType.valueOf(binaryReader.readSizedString()); final InventoryType inventoryType = InventoryType.valueOf(reader.readSizedString());
final int size = inventoryType.getAdditionalSlot(); final int size = inventoryType.getAdditionalSlot();
Inventory inventory = new Inventory(inventoryType, title); Inventory inventory = new Inventory(inventoryType, title);
// Read all item stacks // Read all item stacks
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
inventory.setItemStack(i, binaryReader.readSlot()); inventory.setItemStack(i, reader.readSlot());
} }
return inventory; return inventory;

View File

@ -7,12 +7,12 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class ItemStackData extends DataType<ItemStack> { public class ItemStackData extends DataType<ItemStack> {
@Override @Override
public void encode(BinaryWriter binaryWriter, ItemStack value) { public void encode(BinaryWriter writer, ItemStack value) {
binaryWriter.writeItemStack(value); writer.writeItemStack(value);
} }
@Override @Override
public ItemStack decode(BinaryReader binaryReader) { public ItemStack decode(BinaryReader reader) {
return binaryReader.readSlot(); return reader.readSlot();
} }
} }

View File

@ -6,12 +6,12 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class LongData extends DataType<Long> { public class LongData extends DataType<Long> {
@Override @Override
public void encode(BinaryWriter binaryWriter, Long value) { public void encode(BinaryWriter writer, Long value) {
binaryWriter.writeLong(value); writer.writeLong(value);
} }
@Override @Override
public Long decode(BinaryReader binaryReader) { public Long decode(BinaryReader reader) {
return binaryReader.readLong(); return reader.readLong();
} }
} }

View File

@ -10,12 +10,12 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class SerializableDataData extends DataType<SerializableData> { public class SerializableDataData extends DataType<SerializableData> {
@Override @Override
public void encode(BinaryWriter binaryWriter, SerializableData value) { public void encode(BinaryWriter writer, SerializableData value) {
binaryWriter.writeBytes(value.getSerializedData()); writer.writeBytes(value.getSerializedData());
} }
@Override @Override
public SerializableData decode(BinaryReader binaryReader) { public SerializableData decode(BinaryReader reader) {
return DataReader.readData(binaryReader); return DataReader.readData(reader);
} }
} }

View File

@ -7,12 +7,12 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class ShortData extends DataType<Short> { public class ShortData extends DataType<Short> {
@Override @Override
public void encode(BinaryWriter binaryWriter, Short value) { public void encode(BinaryWriter writer, Short value) {
binaryWriter.writeShort(value); writer.writeShort(value);
} }
@Override @Override
public Short decode(BinaryReader binaryReader) { public Short decode(BinaryReader reader) {
return binaryReader.readShort(); return reader.readShort();
} }
} }

View File

@ -7,12 +7,12 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class StringData extends DataType<String> { public class StringData extends DataType<String> {
@Override @Override
public void encode(BinaryWriter binaryWriter, String value) { public void encode(BinaryWriter writer, String value) {
binaryWriter.writeSizedString(value); writer.writeSizedString(value);
} }
@Override @Override
public String decode(BinaryReader binaryReader) { public String decode(BinaryReader reader) {
return binaryReader.readSizedString(); return reader.readSizedString();
} }
} }

View File

@ -8,12 +8,12 @@ import java.util.UUID;
public class UuidType extends DataType<UUID> { public class UuidType extends DataType<UUID> {
@Override @Override
public void encode(BinaryWriter binaryWriter, UUID value) { public void encode(BinaryWriter writer, UUID value) {
binaryWriter.writeUuid(value); writer.writeUuid(value);
} }
@Override @Override
public UUID decode(BinaryReader binaryReader) { public UUID decode(BinaryReader reader) {
return binaryReader.readUuid(); return reader.readUuid();
} }
} }

View File

@ -7,18 +7,18 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class BooleanArrayData extends DataType<boolean[]> { public class BooleanArrayData extends DataType<boolean[]> {
@Override @Override
public void encode(BinaryWriter binaryWriter, boolean[] value) { public void encode(BinaryWriter writer, boolean[] value) {
binaryWriter.writeVarInt(value.length); writer.writeVarInt(value.length);
for (boolean val : value) { for (boolean val : value) {
binaryWriter.writeBoolean(val); writer.writeBoolean(val);
} }
} }
@Override @Override
public boolean[] decode(BinaryReader binaryReader) { public boolean[] decode(BinaryReader reader) {
boolean[] array = new boolean[binaryReader.readVarInt()]; boolean[] array = new boolean[reader.readVarInt()];
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
array[i] = binaryReader.readBoolean(); array[i] = reader.readBoolean();
} }
return array; return array;
} }

View File

@ -6,13 +6,13 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class ByteArrayData extends DataType<byte[]> { public class ByteArrayData extends DataType<byte[]> {
@Override @Override
public void encode(BinaryWriter binaryWriter, byte[] value) { public void encode(BinaryWriter writer, byte[] value) {
encodeByteArray(binaryWriter, value); encodeByteArray(writer, value);
} }
@Override @Override
public byte[] decode(BinaryReader binaryReader) { public byte[] decode(BinaryReader reader) {
return decodeByteArray(binaryReader); return decodeByteArray(reader);
} }
public static void encodeByteArray(BinaryWriter binaryWriter, byte[] value) { public static void encodeByteArray(BinaryWriter binaryWriter, byte[] value) {

View File

@ -6,18 +6,18 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class CharacterArrayData extends DataType<char[]> { public class CharacterArrayData extends DataType<char[]> {
@Override @Override
public void encode(BinaryWriter binaryWriter, char[] value) { public void encode(BinaryWriter writer, char[] value) {
binaryWriter.writeVarInt(value.length); writer.writeVarInt(value.length);
for (char val : value) { for (char val : value) {
binaryWriter.writeChar(val); writer.writeChar(val);
} }
} }
@Override @Override
public char[] decode(BinaryReader binaryReader) { public char[] decode(BinaryReader reader) {
char[] array = new char[binaryReader.readVarInt()]; char[] array = new char[reader.readVarInt()];
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
array[i] = binaryReader.readChar(); array[i] = reader.readChar();
} }
return array; return array;
} }

View File

@ -7,18 +7,18 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class DoubleArrayData extends DataType<double[]> { public class DoubleArrayData extends DataType<double[]> {
@Override @Override
public void encode(BinaryWriter binaryWriter, double[] value) { public void encode(BinaryWriter writer, double[] value) {
binaryWriter.writeVarInt(value.length); writer.writeVarInt(value.length);
for (double val : value) { for (double val : value) {
binaryWriter.writeDouble(val); writer.writeDouble(val);
} }
} }
@Override @Override
public double[] decode(BinaryReader binaryReader) { public double[] decode(BinaryReader reader) {
double[] array = new double[binaryReader.readVarInt()]; double[] array = new double[reader.readVarInt()];
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
array[i] = binaryReader.readDouble(); array[i] = reader.readDouble();
} }
return array; return array;
} }

View File

@ -7,18 +7,18 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class FloatArrayData extends DataType<float[]> { public class FloatArrayData extends DataType<float[]> {
@Override @Override
public void encode(BinaryWriter binaryWriter, float[] value) { public void encode(BinaryWriter writer, float[] value) {
binaryWriter.writeVarInt(value.length); writer.writeVarInt(value.length);
for (float val : value) { for (float val : value) {
binaryWriter.writeFloat(val); writer.writeFloat(val);
} }
} }
@Override @Override
public float[] decode(BinaryReader binaryReader) { public float[] decode(BinaryReader reader) {
float[] array = new float[binaryReader.readVarInt()]; float[] array = new float[reader.readVarInt()];
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
array[i] = binaryReader.readFloat(); array[i] = reader.readFloat();
} }
return array; return array;
} }

View File

@ -7,18 +7,18 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class IntegerArrayData extends DataType<int[]> { public class IntegerArrayData extends DataType<int[]> {
@Override @Override
public void encode(BinaryWriter binaryWriter, int[] value) { public void encode(BinaryWriter writer, int[] value) {
binaryWriter.writeVarInt(value.length); writer.writeVarInt(value.length);
for (int val : value) { for (int val : value) {
binaryWriter.writeInt(val); writer.writeInt(val);
} }
} }
@Override @Override
public int[] decode(BinaryReader binaryReader) { public int[] decode(BinaryReader reader) {
int[] array = new int[binaryReader.readVarInt()]; int[] array = new int[reader.readVarInt()];
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
array[i] = binaryReader.readInteger(); array[i] = reader.readInteger();
} }
return array; return array;
} }

View File

@ -7,18 +7,18 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class ItemStackArrayData extends DataType<ItemStack[]> { public class ItemStackArrayData extends DataType<ItemStack[]> {
@Override @Override
public void encode(BinaryWriter binaryWriter, ItemStack[] value) { public void encode(BinaryWriter writer, ItemStack[] value) {
binaryWriter.writeVarInt(value.length); writer.writeVarInt(value.length);
for (ItemStack itemStack : value) { for (ItemStack itemStack : value) {
binaryWriter.writeItemStack(itemStack); writer.writeItemStack(itemStack);
} }
} }
@Override @Override
public ItemStack[] decode(BinaryReader binaryReader) { public ItemStack[] decode(BinaryReader reader) {
ItemStack[] items = new ItemStack[binaryReader.readVarInt()]; ItemStack[] items = new ItemStack[reader.readVarInt()];
for (int i = 0; i < items.length; i++) { for (int i = 0; i < items.length; i++) {
items[i] = binaryReader.readSlot(); items[i] = reader.readSlot();
} }
return items; return items;
} }

View File

@ -7,18 +7,18 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class LongArrayData extends DataType<long[]> { public class LongArrayData extends DataType<long[]> {
@Override @Override
public void encode(BinaryWriter binaryWriter, long[] value) { public void encode(BinaryWriter writer, long[] value) {
binaryWriter.writeVarInt(value.length); writer.writeVarInt(value.length);
for (long val : value) { for (long val : value) {
binaryWriter.writeLong(val); writer.writeLong(val);
} }
} }
@Override @Override
public long[] decode(BinaryReader binaryReader) { public long[] decode(BinaryReader reader) {
long[] array = new long[binaryReader.readVarInt()]; long[] array = new long[reader.readVarInt()];
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
array[i] = binaryReader.readLong(); array[i] = reader.readLong();
} }
return array; return array;
} }

View File

@ -7,18 +7,18 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class ShortArrayData extends DataType<short[]> { public class ShortArrayData extends DataType<short[]> {
@Override @Override
public void encode(BinaryWriter binaryWriter, short[] value) { public void encode(BinaryWriter writer, short[] value) {
binaryWriter.writeVarInt(value.length); writer.writeVarInt(value.length);
for (short val : value) { for (short val : value) {
binaryWriter.writeShort(val); writer.writeShort(val);
} }
} }
@Override @Override
public short[] decode(BinaryReader binaryReader) { public short[] decode(BinaryReader reader) {
short[] array = new short[binaryReader.readVarInt()]; short[] array = new short[reader.readVarInt()];
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
array[i] = binaryReader.readShort(); array[i] = reader.readShort();
} }
return array; return array;
} }

View File

@ -7,18 +7,18 @@ import net.minestom.server.utils.binary.BinaryWriter;
public class StringArrayData extends DataType<String[]> { public class StringArrayData extends DataType<String[]> {
@Override @Override
public void encode(BinaryWriter binaryWriter, String[] value) { public void encode(BinaryWriter writer, String[] value) {
binaryWriter.writeVarInt(value.length); writer.writeVarInt(value.length);
for (String val : value) { for (String val : value) {
binaryWriter.writeSizedString(val); writer.writeSizedString(val);
} }
} }
@Override @Override
public String[] decode(BinaryReader binaryReader) { public String[] decode(BinaryReader reader) {
String[] array = new String[binaryReader.readVarInt()]; String[] array = new String[reader.readVarInt()];
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
array[i] = binaryReader.readSizedString(); array[i] = reader.readSizedString();
} }
return array; return array;
} }

View File

@ -22,17 +22,14 @@ import java.util.concurrent.ConcurrentHashMap;
public class PacketProcessor { public class PacketProcessor {
private Map<ChannelHandlerContext, PlayerConnection> connectionPlayerConnectionMap = new ConcurrentHashMap<>(); private final Map<ChannelHandlerContext, PlayerConnection> connectionPlayerConnectionMap = new ConcurrentHashMap<>();
private ConnectionManager connectionManager;
// Protocols // Protocols
private ClientStatusPacketsHandler statusPacketsHandler; private final ClientStatusPacketsHandler statusPacketsHandler;
private ClientLoginPacketsHandler loginPacketsHandler; private final ClientLoginPacketsHandler loginPacketsHandler;
private ClientPlayPacketsHandler playPacketsHandler; private final ClientPlayPacketsHandler playPacketsHandler;
public PacketProcessor() { public PacketProcessor() {
this.connectionManager = MinecraftServer.getConnectionManager();
this.statusPacketsHandler = new ClientStatusPacketsHandler(); this.statusPacketsHandler = new ClientStatusPacketsHandler();
this.loginPacketsHandler = new ClientLoginPacketsHandler(); this.loginPacketsHandler = new ClientLoginPacketsHandler();
@ -62,7 +59,7 @@ public class PacketProcessor {
if (packet.packetId == 0) { if (packet.packetId == 0) {
HandshakePacket handshakePacket = new HandshakePacket(); HandshakePacket handshakePacket = new HandshakePacket();
handshakePacket.read(binaryReader); handshakePacket.read(binaryReader);
handshakePacket.process(playerConnection, connectionManager); handshakePacket.process(playerConnection);
} }
return; return;
} }
@ -77,13 +74,12 @@ public class PacketProcessor {
case LOGIN: case LOGIN:
final ClientPreplayPacket loginPacket = (ClientPreplayPacket) loginPacketsHandler.getPacketInstance(packet.packetId); final ClientPreplayPacket loginPacket = (ClientPreplayPacket) loginPacketsHandler.getPacketInstance(packet.packetId);
loginPacket.read(binaryReader); loginPacket.read(binaryReader);
loginPacket.process(playerConnection, connectionManager); loginPacket.process(playerConnection);
break; break;
case STATUS: case STATUS:
final ClientPreplayPacket statusPacket = (ClientPreplayPacket) statusPacketsHandler.getPacketInstance(packet.packetId); final ClientPreplayPacket statusPacket = (ClientPreplayPacket) statusPacketsHandler.getPacketInstance(packet.packetId);
statusPacket.read(binaryReader); statusPacket.read(binaryReader);
statusPacket.process(playerConnection);
statusPacket.process(playerConnection, connectionManager);
break; break;
} }
} }

View File

@ -1,11 +1,17 @@
package net.minestom.server.network.packet.client; package net.minestom.server.network.packet.client;
import net.minestom.server.MinecraftServer;
import net.minestom.server.network.ConnectionManager; import net.minestom.server.network.ConnectionManager;
import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.network.player.PlayerConnection;
public interface ClientPreplayPacket extends ClientPacket { public interface ClientPreplayPacket extends ClientPacket {
ConnectionManager CONNECTION_MANAGER = MinecraftServer.getConnectionManager();
void process(PlayerConnection connection, ConnectionManager connectionManager); /**
* Called when this packet is received
*
* @param connection the connection who sent the packet
*/
void process(PlayerConnection connection);
} }

View File

@ -3,7 +3,6 @@ package net.minestom.server.network.packet.client.handshake;
import net.minestom.server.MinecraftServer; import net.minestom.server.MinecraftServer;
import net.minestom.server.chat.ChatColor; import net.minestom.server.chat.ChatColor;
import net.minestom.server.chat.ColoredText; import net.minestom.server.chat.ColoredText;
import net.minestom.server.network.ConnectionManager;
import net.minestom.server.network.ConnectionState; import net.minestom.server.network.ConnectionState;
import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.client.ClientPreplayPacket;
import net.minestom.server.network.packet.server.login.LoginDisconnect; import net.minestom.server.network.packet.server.login.LoginDisconnect;
@ -26,7 +25,7 @@ public class HandshakePacket implements ClientPreplayPacket {
} }
@Override @Override
public void process(PlayerConnection connection, ConnectionManager connectionManager) { public void process(PlayerConnection connection) {
switch (nextState) { switch (nextState) {
case 1: case 1:
connection.setConnectionState(ConnectionState.STATUS); connection.setConnectionState(ConnectionState.STATUS);

View File

@ -5,7 +5,6 @@ import com.mojang.authlib.exceptions.AuthenticationUnavailableException;
import net.minestom.server.MinecraftServer; import net.minestom.server.MinecraftServer;
import net.minestom.server.data.type.array.ByteArrayData; import net.minestom.server.data.type.array.ByteArrayData;
import net.minestom.server.extras.mojangAuth.MojangCrypt; import net.minestom.server.extras.mojangAuth.MojangCrypt;
import net.minestom.server.network.ConnectionManager;
import net.minestom.server.network.ConnectionState; import net.minestom.server.network.ConnectionState;
import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.client.ClientPreplayPacket;
import net.minestom.server.network.packet.server.login.LoginSuccessPacket; import net.minestom.server.network.packet.server.login.LoginSuccessPacket;
@ -20,54 +19,54 @@ import java.util.concurrent.atomic.AtomicInteger;
public class EncryptionResponsePacket implements ClientPreplayPacket { public class EncryptionResponsePacket implements ClientPreplayPacket {
private final static String THREAD_NAME = "Mojang Auth Thread"; private final static String THREAD_NAME = "Mojang Auth Thread";
private static AtomicInteger UNIQUE_THREAD_ID = new AtomicInteger(0); private static AtomicInteger UNIQUE_THREAD_ID = new AtomicInteger(0);
private byte[] sharedSecret; private byte[] sharedSecret;
private byte[] verifyToken; private byte[] verifyToken;
@Override @Override
public void process(PlayerConnection connection, ConnectionManager connectionManager) { public void process(PlayerConnection connection) {
new Thread(THREAD_NAME + " #" + UNIQUE_THREAD_ID.incrementAndGet()) { new Thread(THREAD_NAME + " #" + UNIQUE_THREAD_ID.incrementAndGet()) {
public void run() { public void run() {
try { try {
if (!Arrays.equals(connection.getNonce(), getNonce())) { if (!Arrays.equals(connection.getNonce(), getNonce())) {
System.out.println(connection.getLoginUsername() + " tried to login with an invalid nonce!"); System.out.println(connection.getLoginUsername() + " tried to login with an invalid nonce!");
return; return;
} }
if (!connection.getLoginUsername().isEmpty()) { if (!connection.getLoginUsername().isEmpty()) {
String string3 = new BigInteger(MojangCrypt.digestData("", MinecraftServer.getKeyPair().getPublic(), getSecretKey())).toString(16); final String string3 = new BigInteger(MojangCrypt.digestData("", MinecraftServer.getKeyPair().getPublic(), getSecretKey())).toString(16);
GameProfile gameProfile = MinecraftServer.getSessionService().hasJoinedServer(new GameProfile(null, connection.getLoginUsername()), string3); final GameProfile gameProfile = MinecraftServer.getSessionService().hasJoinedServer(new GameProfile(null, connection.getLoginUsername()), string3);
((NettyPlayerConnection) connection).setEncryptionKey(getSecretKey()); ((NettyPlayerConnection) connection).setEncryptionKey(getSecretKey());
final int threshold = MinecraftServer.COMPRESSION_THRESHOLD; final int threshold = MinecraftServer.COMPRESSION_THRESHOLD;
if (threshold > 0) { if (threshold > 0) {
connection.enableCompression(threshold); connection.enableCompression(threshold);
} }
LoginSuccessPacket loginSuccessPacket = new LoginSuccessPacket(gameProfile.getId(), gameProfile.getName()); LoginSuccessPacket loginSuccessPacket = new LoginSuccessPacket(gameProfile.getId(), gameProfile.getName());
connection.sendPacket(loginSuccessPacket); connection.sendPacket(loginSuccessPacket);
MinecraftServer.getLOGGER().info("UUID of player {} is {}", connection.getLoginUsername(), gameProfile.getId()); MinecraftServer.getLOGGER().info("UUID of player {} is {}", connection.getLoginUsername(), gameProfile.getId());
connection.setConnectionState(ConnectionState.PLAY); connection.setConnectionState(ConnectionState.PLAY);
connectionManager.createPlayer(gameProfile.getId(), gameProfile.getName(), connection); CONNECTION_MANAGER.createPlayer(gameProfile.getId(), gameProfile.getName(), connection);
} }
} catch (AuthenticationUnavailableException e) { } catch (AuthenticationUnavailableException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
}.start(); }.start();
} }
@Override @Override
public void read(BinaryReader reader) { public void read(BinaryReader reader) {
sharedSecret = ByteArrayData.decodeByteArray(reader); sharedSecret = ByteArrayData.decodeByteArray(reader);
verifyToken = ByteArrayData.decodeByteArray(reader); verifyToken = ByteArrayData.decodeByteArray(reader);
} }
public SecretKey getSecretKey() { public SecretKey getSecretKey() {
return MojangCrypt.decryptByteToSecretKey(MinecraftServer.getKeyPair().getPrivate(), sharedSecret); return MojangCrypt.decryptByteToSecretKey(MinecraftServer.getKeyPair().getPrivate(), sharedSecret);
} }
public byte[] getNonce() { public byte[] getNonce() {
return MinecraftServer.getKeyPair().getPrivate() == null ? this.verifyToken : MojangCrypt.decryptUsingKey(MinecraftServer.getKeyPair().getPrivate(), this.verifyToken); return MinecraftServer.getKeyPair().getPrivate() == null ? this.verifyToken : MojangCrypt.decryptUsingKey(MinecraftServer.getKeyPair().getPrivate(), this.verifyToken);
} }
} }

View File

@ -4,7 +4,6 @@ import net.minestom.server.MinecraftServer;
import net.minestom.server.chat.ChatColor; import net.minestom.server.chat.ChatColor;
import net.minestom.server.chat.ColoredText; import net.minestom.server.chat.ColoredText;
import net.minestom.server.extras.MojangAuth; import net.minestom.server.extras.MojangAuth;
import net.minestom.server.network.ConnectionManager;
import net.minestom.server.network.ConnectionState; import net.minestom.server.network.ConnectionState;
import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.client.ClientPreplayPacket;
import net.minestom.server.network.packet.server.login.EncryptionRequestPacket; import net.minestom.server.network.packet.server.login.EncryptionRequestPacket;
@ -23,9 +22,9 @@ public class LoginStartPacket implements ClientPreplayPacket {
public String username; public String username;
@Override @Override
public void process(PlayerConnection connection, ConnectionManager connectionManager) { public void process(PlayerConnection connection) {
if (MojangAuth.isUsingMojangAuth()) { if (MojangAuth.isUsingMojangAuth()) {
if (connectionManager.getPlayer(username) != null) { if (CONNECTION_MANAGER.getPlayer(username) != null) {
connection.sendPacket(new LoginDisconnect(ALREADY_CONNECTED_JSON)); connection.sendPacket(new LoginDisconnect(ALREADY_CONNECTED_JSON));
connection.disconnect(); connection.disconnect();
return; return;
@ -36,9 +35,9 @@ public class LoginStartPacket implements ClientPreplayPacket {
EncryptionRequestPacket encryptionRequestPacket = new EncryptionRequestPacket(connection); EncryptionRequestPacket encryptionRequestPacket = new EncryptionRequestPacket(connection);
connection.sendPacket(encryptionRequestPacket); connection.sendPacket(encryptionRequestPacket);
} else { } else {
UUID playerUuid = connectionManager.getPlayerConnectionUuid(connection, username); final UUID playerUuid = CONNECTION_MANAGER.getPlayerConnectionUuid(connection, username);
int threshold = MinecraftServer.COMPRESSION_THRESHOLD; final int threshold = MinecraftServer.COMPRESSION_THRESHOLD;
if (threshold > 0) { if (threshold > 0) {
connection.enableCompression(threshold); connection.enableCompression(threshold);
@ -48,7 +47,7 @@ public class LoginStartPacket implements ClientPreplayPacket {
connection.sendPacket(successPacket); connection.sendPacket(successPacket);
connection.setConnectionState(ConnectionState.PLAY); connection.setConnectionState(ConnectionState.PLAY);
connectionManager.createPlayer(playerUuid, username, connection); CONNECTION_MANAGER.createPlayer(playerUuid, username, connection);
} }
} }

View File

@ -1,6 +1,5 @@
package net.minestom.server.network.packet.client.status; package net.minestom.server.network.packet.client.status;
import net.minestom.server.network.ConnectionManager;
import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.client.ClientPreplayPacket;
import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.network.player.PlayerConnection;
import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryReader;
@ -10,7 +9,7 @@ public class LegacyServerListPingPacket implements ClientPreplayPacket {
private byte payload; private byte payload;
@Override @Override
public void process(PlayerConnection connection, ConnectionManager connectionManager) { public void process(PlayerConnection connection) {
} }

View File

@ -1,6 +1,5 @@
package net.minestom.server.network.packet.client.status; package net.minestom.server.network.packet.client.status;
import net.minestom.server.network.ConnectionManager;
import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.client.ClientPreplayPacket;
import net.minestom.server.network.packet.server.status.PongPacket; import net.minestom.server.network.packet.server.status.PongPacket;
import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.network.player.PlayerConnection;
@ -11,7 +10,7 @@ public class PingPacket implements ClientPreplayPacket {
private long number; private long number;
@Override @Override
public void process(PlayerConnection connection, ConnectionManager connectionManager) { public void process(PlayerConnection connection) {
PongPacket pongPacket = new PongPacket(number); PongPacket pongPacket = new PongPacket(number);
connection.sendPacket(pongPacket); connection.sendPacket(pongPacket);
connection.disconnect(); connection.disconnect();

View File

@ -1,7 +1,6 @@
package net.minestom.server.network.packet.client.status; package net.minestom.server.network.packet.client.status;
import net.minestom.server.MinecraftServer; import net.minestom.server.MinecraftServer;
import net.minestom.server.network.ConnectionManager;
import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.client.ClientPreplayPacket;
import net.minestom.server.network.packet.server.handshake.ResponsePacket; import net.minestom.server.network.packet.server.handshake.ResponsePacket;
import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.network.player.PlayerConnection;
@ -12,7 +11,7 @@ import net.minestom.server.utils.binary.BinaryReader;
public class StatusRequestPacket implements ClientPreplayPacket { public class StatusRequestPacket implements ClientPreplayPacket {
@Override @Override
public void process(PlayerConnection connection, ConnectionManager connectionManager) { public void process(PlayerConnection connection) {
ResponseDataConsumer consumer = MinecraftServer.getResponseDataConsumer(); ResponseDataConsumer consumer = MinecraftServer.getResponseDataConsumer();
ResponseData responseData = new ResponseData(); ResponseData responseData = new ResponseData();

View File

@ -4,8 +4,20 @@ import net.minestom.server.utils.binary.BinaryWriter;
public interface ServerPacket { public interface ServerPacket {
/**
* Write the packet to a {@link BinaryWriter}
*
* @param writer the writer to write the packet to
*/
void write(BinaryWriter writer); void write(BinaryWriter writer);
/**
* Get the id of this packet
* <p>
* Should be a constant
*
* @return the id of this packet
*/
int getId(); int getId();
} }