Selaa lähdekoodia

Upload files to 'core/src/main/java/me/lethunderhawk/network'

Jan 1 kuukausi sitten
vanhempi
säilyke
142bbc79b5

+ 75 - 0
core/src/main/java/me/lethunderhawk/network/GameClient.java

@@ -0,0 +1,75 @@
+package me.lethunderhawk.network;
+
+import com.esotericsoftware.kryonet.Client;
+import com.esotericsoftware.kryonet.Connection;
+import com.esotericsoftware.kryonet.Listener;
+import me.lethunderhawk.entity.Player;
+
+import java.io.IOException;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class GameClient extends Listener {
+
+    private final Client client;
+    private final Map<UUID, Player> otherPlayers = new ConcurrentHashMap<>();
+    private final Player player;
+
+    public GameClient() {
+        this.player = new Player();
+        client = new Client();
+
+        client.start();
+
+        registerPackets();
+    }
+
+    private void registerPackets() {
+        NetworkRegister.register(client.getKryo());
+    }
+
+    public void connect(String ip) throws IOException {
+
+        client.connect(
+            5000,
+            ip,
+            54555,
+            54777
+        );
+        client.addListener(this);
+    }
+
+    public void send(Object packet) {
+
+        client.sendUDP(packet);
+    }
+
+    @Override
+    public void received (Connection connection, Object object) {
+        if(object instanceof Packets.PlayerLoginPacket packet) {
+            otherPlayers.put(packet.player.uuid, packet.player);
+        }
+
+        if(object instanceof Packets.PlayerPositionPacket packet) {
+            handlePlayerPosition(packet);
+        }
+    }
+
+    private void handlePlayerPosition(Packets.PlayerPositionPacket packet) {
+        Player player = otherPlayers.computeIfAbsent(packet.player.uuid, uuid -> {
+            Player p = new Player();
+            p.uuid = uuid;
+            return p;
+        });
+        player.x = packet.x;
+        player.y = packet.y;
+    }
+
+    public Player getPlayer() {
+        return player;
+    }
+
+    public Map<UUID, Player> getOtherPlayers() {
+        return otherPlayers;
+    }
+}

+ 29 - 0
core/src/main/java/me/lethunderhawk/network/NetworkRegister.java

@@ -0,0 +1,29 @@
+package me.lethunderhawk.network;
+
+import com.esotericsoftware.kryo.Kryo;
+import com.esotericsoftware.kryo.Serializer;
+import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
+import com.esotericsoftware.kryo.serializers.DefaultSerializers;
+import me.lethunderhawk.entity.Player;
+
+import java.util.UUID;
+
+public class NetworkRegister {
+
+    public static void register(Kryo kryo) {
+        kryo.register(Packets.PlayerPositionPacket.class);
+        kryo.register(Packets.PlayerLoginPacket.class);
+        kryo.register(Player.class);
+        kryo.register(UUID.class, new Serializer<UUID>() {
+            public void write(Kryo kryo, Output out, UUID uuid) {
+                out.writeLong(uuid.getMostSignificantBits());
+                out.writeLong(uuid.getLeastSignificantBits());
+            }
+
+            public UUID read(Kryo kryo, Input in, Class<UUID> type) {
+                return new UUID(in.readLong(), in.readLong());
+            }
+        });
+    }
+}

+ 32 - 0
core/src/main/java/me/lethunderhawk/network/Packets.java

@@ -0,0 +1,32 @@
+package me.lethunderhawk.network;
+
+import me.lethunderhawk.entity.Player;
+
+import java.awt.*;
+
+public class Packets {
+
+    /*public abstract static class Packet{
+        abstract void onReceive();
+
+    }*/
+
+    public static class PlayerPositionPacket {
+        public Player player;
+        public float x;
+        public float y;
+
+        public PlayerPositionPacket() {}
+
+        public PlayerPositionPacket(Player player, float x, float y) {
+            this.player = player;
+            this.x = x;
+            this.y = y;
+        }
+    }
+
+    public static class PlayerLoginPacket {
+        public Player player;
+
+    }
+}