package com.lifeknight.relaymchub.miscellaneous; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.lifeknight.relaymchub.Main; import com.lifeknight.relaymchub.player.HubPlayer; import com.lifeknight.relaymcutils.RelayMCUtils; import com.lifeknight.relaymcutils.event.MessageReceivedEvent; import com.lifeknight.relaymcutils.player.SmartPlayer; import com.lifeknight.relayutils.RelayUtils; import com.lifeknight.relayutils.basic.Text; import com.lifeknight.relayutils.data.PartyData; import com.lifeknight.relayutils.data.QueueData; import com.lifeknight.relayutils.game.GameType; import com.lifeknight.relayutils.network.Message; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import java.util.HashMap; import java.util.Map; import java.util.regex.Pattern; public class MessageProcessor implements Listener { @EventHandler public void onMessageReceived(MessageReceivedEvent event) { Message message = event.getMessage(); try { handleProxyMessage(message); } catch (Exception exception) { RelayUtils.printError("processing of a message", exception, 5); } } private static void handleUnknownMessage(Message message) { } private static void handleProxyMessage(Message message) { String[] arguments = message.getArgumentsStringArray(); switch (message.getCommandCommand()) { case UPDATE_INFO: break; case PLAYER_COUNT: handlePlayerCount(arguments[0].split(",")); break; case HUBS: handleHubs(arguments); break; case SCOREBOARD: SmartPlayer smartPlayer = SmartPlayer.getSmartPlayer(arguments[0]); if (smartPlayer == null) return; HubPlayer.getHubPlayer(smartPlayer).displayDefaultScoreboard(); break; case OTHER: switch (arguments[0]) { case "duelsgames": Main.onCustomKitsCount(arguments[1]); break; case "queueposition": HubPlayer.getHubPlayer(arguments[1]).updateQueuePosition(Integer.parseInt(arguments[2]), Integer.parseInt(arguments[3]), Integer.parseInt(arguments[4]), Integer.parseInt(arguments[5]), Integer.parseInt(arguments[6]), Boolean.parseBoolean(arguments[7])); break; case "queuescoreboard": HubPlayer.getHubPlayer(arguments[1]).updateQueueScoreboard(GameType.getGameType(arguments[2]), Integer.parseInt(arguments[3]), Integer.parseInt(arguments[4]), Integer.parseInt(arguments[5]), Integer.parseInt(arguments[6]), Integer.parseInt(arguments[7]), Boolean.parseBoolean(arguments[8]), Boolean.parseBoolean(arguments[9]), QueueData.fromString(arguments[10])); break; case "partydata": HubPlayer hubPlayer = HubPlayer.getHubPlayer(arguments[1]); PartyData partyData = null; if (!arguments[2].equals("none")) { partyData = PartyData.fromString(arguments[2]); } hubPlayer.updatePartyInfo(partyData); break; case "duelgui": HubPlayer.getHubPlayer(arguments[1]).showDuelGui(arguments[2]); break; case "ping": break; case "requeue": HubPlayer.getHubPlayer(arguments[1]).setCanRequeue(); break; case "limbo": if (Main.isLimbo()) { SmartPlayer.getSmartPlayer(arguments[1]).setCanPickUpItems(true); } break; case "limboqueueposition": if (Main.isLimbo()) { HubPlayer.getHubPlayer(arguments[1]).setLimboQueuePosition(arguments[2], arguments[3]); } break; case "chat": { HubPlayer.getHubPlayer(arguments[1]).onChat(arguments[2]); } break; case "dailyjoin": { HubPlayer.getHubPlayer(arguments[1]).onDailyJoin(); break; } default: Main.error("Unrecognized other command: %s", arguments[0]); break; } break; } } public static void handlePlayerCount(String[] arguments) { Map<GameType, Integer> counts = new HashMap<>(); for (String playerCount : arguments) { String[] split = playerCount.split(Pattern.quote(":")); GameType gameType = GameType.getGameType(split[0]); if (gameType != null) { int count = Integer.parseInt(split[1]); counts.put(gameType, count); } else { RelayMCUtils.error("Unrecognized gametype: %s", split[0]); } } Main.onPlayerCount(counts); } public static void handleHubs(String[] arguments) { JsonArray jsonArray = new JsonParser().parse(arguments[0]).getAsJsonArray(); Map<String, Map<String, Integer>> hubs = new HashMap<>(); for (JsonElement jsonElement : jsonArray) { JsonObject hubGroup = jsonElement.getAsJsonObject(); String type = hubGroup.get("type").getAsString(); Map<String, Integer> hubsMap = new HashMap<>(); for (JsonElement element : hubGroup.get("hubs").getAsJsonArray()) { JsonObject hub = element.getAsJsonObject(); String hubName = hub.get("name").getAsString(); int count = hub.get("count").getAsInt(); hubsMap.put(hubName, count); } hubs.put(type, hubsMap); } for (String s : hubs.keySet()) { if (Text.toComparable(s).equals(Text.toComparable(Main.hubType))) { SmartGUIUtils.onHubs(hubs.get(s)); break; } } } }