|
@@ -2,12 +2,20 @@ package me.lethunderhawk.server;
|
|
|
|
|
|
|
|
import com.esotericsoftware.kryonet.Connection;
|
|
import com.esotericsoftware.kryonet.Connection;
|
|
|
import com.esotericsoftware.kryonet.Server;
|
|
import com.esotericsoftware.kryonet.Server;
|
|
|
|
|
+import me.lethunderhawk.command.Command;
|
|
|
|
|
+import me.lethunderhawk.command.CommandContext;
|
|
|
|
|
+import me.lethunderhawk.command.CommandRegistry;
|
|
|
import me.lethunderhawk.constant.IntProperties;
|
|
import me.lethunderhawk.constant.IntProperties;
|
|
|
|
|
+import me.lethunderhawk.constant.StringProperties;
|
|
|
|
|
+import me.lethunderhawk.messages.Message;
|
|
|
|
|
+import me.lethunderhawk.messages.PlayerChatMessage;
|
|
|
import me.lethunderhawk.network.packet.impl.*;
|
|
import me.lethunderhawk.network.packet.impl.*;
|
|
|
|
|
+import me.lethunderhawk.world.entity.player.ServerPlayer;
|
|
|
import me.lethunderhawk.world.entity.player.Player;
|
|
import me.lethunderhawk.world.entity.player.Player;
|
|
|
import me.lethunderhawk.network.packet.PacketHandler;
|
|
import me.lethunderhawk.network.packet.PacketHandler;
|
|
|
import me.lethunderhawk.network.packet.PacketListener;
|
|
import me.lethunderhawk.network.packet.PacketListener;
|
|
|
|
|
|
|
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
|
|
@@ -15,7 +23,7 @@ public class GameServerPacketListener implements PacketListener {
|
|
|
/**
|
|
/**
|
|
|
* Connection id --> Player
|
|
* Connection id --> Player
|
|
|
*/
|
|
*/
|
|
|
- private final Map<Integer, Player> players = new HashMap<>();
|
|
|
|
|
|
|
+ private final Map<Integer, ServerPlayer> players = new HashMap<>();
|
|
|
public Server server;
|
|
public Server server;
|
|
|
private final GameServer gameServer;
|
|
private final GameServer gameServer;
|
|
|
|
|
|
|
@@ -23,23 +31,53 @@ public class GameServerPacketListener implements PacketListener {
|
|
|
this.server = server;
|
|
this.server = server;
|
|
|
this.gameServer = gameServer;
|
|
this.gameServer = gameServer;
|
|
|
}
|
|
}
|
|
|
|
|
+ @PacketHandler
|
|
|
|
|
+ public void onMessage(MessagePacket packet, Connection connection) {
|
|
|
|
|
+ int connectionId = connection.getID();
|
|
|
|
|
+ Message playerMessage = packet.getMessage();
|
|
|
|
|
+
|
|
|
|
|
+ if(!(playerMessage instanceof PlayerChatMessage)){ return; }
|
|
|
|
|
+
|
|
|
|
|
+ String message = playerMessage.getMessage();
|
|
|
|
|
+ ServerPlayer connectedPlayer = players.get(connectionId);
|
|
|
|
|
+
|
|
|
|
|
+ if(message.startsWith(StringProperties.COMMAND_PREFIX.getValue())){
|
|
|
|
|
+
|
|
|
|
|
+ Command command = CommandRegistry.get(message.substring(1).split(" ")[0]);
|
|
|
|
|
+ if(command != null && connectedPlayer.isOp()){
|
|
|
|
|
+ String[] split = message.split(" ");
|
|
|
|
|
+ String[] args = Arrays.copyOfRange(split, 1, split.length);
|
|
|
|
|
+
|
|
|
|
|
+ command.execute(new CommandContext(message, args, connectedPlayer));
|
|
|
|
|
+
|
|
|
|
|
+ System.out.println(playerMessage.getFromName() + " issued Command: " + message);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ System.out.println(playerMessage.getFromName() + " tried to issue Command: " + message);
|
|
|
|
|
+ connectedPlayer.sendMessage("Unknown Command or insufficient permissions!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }else{
|
|
|
|
|
+ server.sendToAllExceptUDP(connectionId, packet);
|
|
|
|
|
+ System.out.println("Message from " + playerMessage.getFromName() + ": " + message);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
|
|
|
@PacketHandler
|
|
@PacketHandler
|
|
|
public void onPlayerPosition(PlayerPositionPacket packet, Connection connection) {
|
|
public void onPlayerPosition(PlayerPositionPacket packet, Connection connection) {
|
|
|
int connectionId = connection.getID();
|
|
int connectionId = connection.getID();
|
|
|
Player player = players.get(connectionId);
|
|
Player player = players.get(connectionId);
|
|
|
-
|
|
|
|
|
- if(packet.x < 0 || packet.x > gameServer.getWorld().getRealWidth() - player.getBounds().width || packet.y < 0 || packet.y > gameServer.getWorld().getRealHeight() - player.getBounds().height) {
|
|
|
|
|
- float realX = Math.clamp(packet.x, 0f, gameServer.getWorld().getRealWidth() - player.getBounds().width);
|
|
|
|
|
- float realY = Math.clamp(packet.y, 0f, gameServer.getWorld().getRealHeight() - player.getBounds().height);
|
|
|
|
|
|
|
+ float x = packet.getPosition().x;
|
|
|
|
|
+ float y = packet.getPosition().y;
|
|
|
|
|
+ if(x < 0 || x > gameServer.getWorld().getRealWidth() - player.getBounds().width || y < 0 || y > gameServer.getWorld().getRealHeight() - player.getBounds().height) {
|
|
|
|
|
+ float realX = Math.clamp(x, 0f, gameServer.getWorld().getRealWidth() - player.getBounds().width);
|
|
|
|
|
+ float realY = Math.clamp(y, 0f, gameServer.getWorld().getRealHeight() - player.getBounds().height);
|
|
|
PlayerPositionPacket correctionPacket = new PlayerPositionPacket(packet.uuid, realX, realY);
|
|
PlayerPositionPacket correctionPacket = new PlayerPositionPacket(packet.uuid, realX, realY);
|
|
|
server.sendToAllUDP(correctionPacket);
|
|
server.sendToAllUDP(correctionPacket);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
server.sendToAllExceptUDP(connectionId, packet);
|
|
server.sendToAllExceptUDP(connectionId, packet);
|
|
|
- Player p = players.get(connectionId);
|
|
|
|
|
- p.x = packet.x;
|
|
|
|
|
- p.y = packet.y;
|
|
|
|
|
|
|
+ player.getPosition().set(x, y);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@PacketHandler
|
|
@PacketHandler
|
|
@@ -50,12 +88,12 @@ public class GameServerPacketListener implements PacketListener {
|
|
|
|
|
|
|
|
@PacketHandler
|
|
@PacketHandler
|
|
|
public void onLogin(PlayerLoginPacket packet, Connection connection){
|
|
public void onLogin(PlayerLoginPacket packet, Connection connection){
|
|
|
- if(!validatePlayer(packet.player)){
|
|
|
|
|
|
|
+ if(!validatePlayer(packet.getPlayer())){
|
|
|
connection.close();
|
|
connection.close();
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- players.putIfAbsent(connection.getID(), packet.player);
|
|
|
|
|
|
|
+ players.putIfAbsent(connection.getID(), new ServerPlayer(packet.getPlayer(), connection));
|
|
|
|
|
|
|
|
server.sendToAllExceptUDP(connection.getID(), packet);
|
|
server.sendToAllExceptUDP(connection.getID(), packet);
|
|
|
server.sendToUDP(connection.getID(), new PlayerLoginSuccessPacket());
|
|
server.sendToUDP(connection.getID(), new PlayerLoginSuccessPacket());
|
|
@@ -64,12 +102,9 @@ public class GameServerPacketListener implements PacketListener {
|
|
|
WorldDataPacket worldPacket = new WorldDataPacket(gameServer.getWorld());
|
|
WorldDataPacket worldPacket = new WorldDataPacket(gameServer.getWorld());
|
|
|
server.sendToTCP(connection.getID(), worldPacket);
|
|
server.sendToTCP(connection.getID(), worldPacket);
|
|
|
|
|
|
|
|
- for(Player player : players.values()){
|
|
|
|
|
- if(player.uuid.equals(packet.player.uuid)) return;
|
|
|
|
|
- PlayerLoginPacket loginPacket = new PlayerLoginPacket();
|
|
|
|
|
- loginPacket.player = player;
|
|
|
|
|
- loginPacket.login_x = player.x;
|
|
|
|
|
- loginPacket.login_y = player.y;
|
|
|
|
|
|
|
+ for(ServerPlayer player : players.values()){
|
|
|
|
|
+ if(player.getUuid().equals(packet.getPlayer().getUuid())) return;
|
|
|
|
|
+ PlayerLoginPacket loginPacket = new PlayerLoginPacket(new Player(player));
|
|
|
server.sendToUDP(connection.getID(), loginPacket);
|
|
server.sendToUDP(connection.getID(), loginPacket);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|