From 95b42a4b27d81df79a5ae3a24ec44fde36c34a8b Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 6 Mar 2024 05:23:45 -0500 Subject: [PATCH] Allow you to kick offline players --- .../java/noppes/npcs/PacketHandlerServer.java | 33 ++++++++++++++----- .../npcs/controllers/PartyController.java | 6 ++-- .../controllers/PlayerDataController.java | 9 +++++ .../noppes/npcs/controllers/data/Party.java | 18 ++++++++++ 4 files changed, 55 insertions(+), 11 deletions(-) diff --git a/src/main/java/noppes/npcs/PacketHandlerServer.java b/src/main/java/noppes/npcs/PacketHandlerServer.java index 8f823d3f3..847cbd1ad 100644 --- a/src/main/java/noppes/npcs/PacketHandlerServer.java +++ b/src/main/java/noppes/npcs/PacketHandlerServer.java @@ -130,25 +130,42 @@ public class PacketHandlerServer{ compound.setBoolean("Disband", true); Server.sendData(player, EnumPacketClient.PARTY_DATA, compound); } else if (type == EnumPacketServer.KickPlayer) { - EntityPlayer kickPlayer = NoppesUtilServer.getPlayerByName(Server.readString(buffer)); + String kickPlayerName = Server.readString(buffer); + EntityPlayer kickPlayer = NoppesUtilServer.getPlayerByName(kickPlayerName); + PlayerData playerData = null; + UUID playerUUID = null; if (kickPlayer != null) { - PlayerData playerData = PlayerDataController.Instance.getPlayerData(player); - if (playerData.partyUUID != null) { - Party party = PartyController.Instance().getParty(playerData.partyUUID); + playerData = PlayerDataController.Instance.getPlayerData(player); + } else { + String uuid = PlayerDataController.Instance.getPlayerUUIDFromName(kickPlayerName); + if(!uuid.isEmpty()){ + playerData = PlayerDataController.Instance.getPlayerDataCache(uuid); + playerUUID = UUID.fromString(uuid); + } + } + + if(playerData != null){ + if (playerData.partyUUID != null) { + Party party = PartyController.Instance().getParty(playerData.partyUUID); if (!party.getIsLocked()) { PartyEvent.PartyKickEvent partyEvent = new PartyEvent.PartyKickEvent(party, party.getQuest(), (IPlayer) NpcAPI.Instance().getIEntity(kickPlayer)); EventHooks.onPartyKick(partyEvent); if (!partyEvent.isCancelled()){ boolean successful = party.removePlayer(kickPlayer); + if(!successful) + successful = party.removePlayer(playerUUID); + if(successful){ - sendInviteData((EntityPlayerMP) kickPlayer); + if(kickPlayer != null){ + sendInviteData((EntityPlayerMP) kickPlayer); + } PartyController.Instance().pingPartyUpdate(party); - PartyController.Instance().sendKickMessages(party, kickPlayer); + PartyController.Instance().sendKickMessages(party, kickPlayerName); } } } - } - } + } + } } else if (type == EnumPacketServer.LeavePlayer) { EntityPlayer leavingPlayer = NoppesUtilServer.getPlayerByName(Server.readString(buffer)); if (leavingPlayer != null) { diff --git a/src/main/java/noppes/npcs/controllers/PartyController.java b/src/main/java/noppes/npcs/controllers/PartyController.java index 8334248a8..960dbdcb0 100644 --- a/src/main/java/noppes/npcs/controllers/PartyController.java +++ b/src/main/java/noppes/npcs/controllers/PartyController.java @@ -78,15 +78,15 @@ public class PartyController { } } - public void sendKickMessages(Party party, EntityPlayer kickPlayer){ + public void sendKickMessages(Party party, String kickPlayer){ if(kickPlayer == null || party == null) return; for(String name : party.getPlayerNames()){ EntityPlayer playerMP = NoppesUtilServer.getPlayerByName(name); if(playerMP != null){ - Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.PARTY_MESSAGE, "party.kickOtherAlert", kickPlayer.getCommandSenderName()); - Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.CHAT, "\u00A7e", kickPlayer.getCommandSenderName(), " \u00A74", "party.kickOtherChat", "!"); + Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.PARTY_MESSAGE, "party.kickOtherAlert", kickPlayer); + Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.CHAT, "\u00A7e", kickPlayer, " \u00A74", "party.kickOtherChat", "!"); } } Server.sendData((EntityPlayerMP) kickPlayer, EnumPacketClient.PARTY_MESSAGE, "party.kickYouAlert", ""); diff --git a/src/main/java/noppes/npcs/controllers/PlayerDataController.java b/src/main/java/noppes/npcs/controllers/PlayerDataController.java index f6ba49118..e102ab6c0 100644 --- a/src/main/java/noppes/npcs/controllers/PlayerDataController.java +++ b/src/main/java/noppes/npcs/controllers/PlayerDataController.java @@ -332,6 +332,15 @@ public class PlayerDataController { return ""; } + public String getPlayerUUIDFromName(String username) { + for(String name : nameUUIDs.keySet()){ + if(name.equalsIgnoreCase(username)) + return nameUUIDs.get(name); + } + + return ""; + } + public PlayerData getDataFromUsername(String username){ EntityPlayer player = MinecraftServer.getServer().getConfigurationManager().func_152612_a(username); PlayerData data = null; diff --git a/src/main/java/noppes/npcs/controllers/data/Party.java b/src/main/java/noppes/npcs/controllers/data/Party.java index 715749d4c..8b3ff133f 100644 --- a/src/main/java/noppes/npcs/controllers/data/Party.java +++ b/src/main/java/noppes/npcs/controllers/data/Party.java @@ -139,6 +139,24 @@ public class Party implements IParty { return false; } + public boolean removePlayer(UUID uuid) { + if (uuid == null) return false; + if(partyMembers.containsKey(uuid)){ + partyMembers.remove(uuid); + partyOrder.remove(uuid); + if(uuid.equals(partyLeader)){ + if(!partyMembers.isEmpty()){ + partyLeader = partyOrder.get(0); + } + } + + PlayerData playerData = PlayerDataController.Instance.getPlayerDataCache(uuid.toString()); + playerData.partyUUID = null; + return true; + } + return false; + } + @Override public boolean addPlayer(String playerName) { return playerName != null && this.addPlayer(NoppesUtilServer.getPlayerByName(playerName));