From 82855f48a3e7fea5e9418435279fe9dd53d6e608 Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 5 Nov 2020 21:48:13 -0500 Subject: New menu when clicking a server --- serverlist-server/BedrockConnect.iml | 51 ++++++++++-- .../pugmatt/bedrockconnect/gui/UIForms.java | 69 ++++++++++++---- .../bedrockconnect/listeners/PacketHandler.java | 95 +++++++++++++++------- 3 files changed, 160 insertions(+), 55 deletions(-) diff --git a/serverlist-server/BedrockConnect.iml b/serverlist-server/BedrockConnect.iml index 52fad66..46c6a7a 100644 --- a/serverlist-server/BedrockConnect.iml +++ b/serverlist-server/BedrockConnect.iml @@ -10,9 +10,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -29,15 +70,7 @@ - - - - - - - - - + \ No newline at end of file diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIForms.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIForms.java index ff6c10d..62bc108 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIForms.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIForms.java @@ -3,20 +3,19 @@ package main.com.pyratron.pugmatt.bedrockconnect.gui; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.nukkitx.protocol.bedrock.packet.ModalFormRequestPacket; +import main.com.pyratron.pugmatt.bedrockconnect.listeners.PacketHandler; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; public class UIForms { - public static final int ERROR = 2, MAIN = 0, DIRECT_CONNECT = 1, REMOVE_SERVER = 3, DONATION = 4; - - public static int currentForm = 0; + public static final int ERROR = 2, MAIN = 0, DIRECT_CONNECT = 1, OPEN_SERVER = 3, DONATION = 4, MODIFY_SERVER = 5, REMOVE_SERVER = 6; public static final char ESCAPE = '\u00a7'; - public static ModalFormRequestPacket createMain(List servers) { - currentForm = MAIN; + public static ModalFormRequestPacket createMain(List servers, PacketHandler handler) { + handler.setForm(UIForms.MAIN); ModalFormRequestPacket mf = new ModalFormRequestPacket(); mf.setFormId(UIForms.MAIN); @@ -26,7 +25,6 @@ public class UIForms { JsonArray buttons = new JsonArray(); buttons.add(UIComponents.createButton("Connect to a Server")); - buttons.add(UIComponents.createButton("Remove a Server")); for(int i=0;i servers) { - currentForm = REMOVE_SERVER; + public static ModalFormRequestPacket createOpenServer(String server, PacketHandler handler) { + handler.setForm(UIForms.OPEN_SERVER); + ModalFormRequestPacket mf = new ModalFormRequestPacket(); + mf.setFormId(OPEN_SERVER); + + JsonObject out = UIComponents.createForm("form", server); + out.addProperty("content", ""); + + JsonArray buttons = new JsonArray(); + + buttons.add(UIComponents.createButton("Connect")); + buttons.add(UIComponents.createButton("Modify Server")); + buttons.add(UIComponents.createButton("Remove Server")); + out.add("buttons", buttons); + + mf.setFormData(out.toString()); + + return mf; + } + + public static ModalFormRequestPacket createRemoveServer(PacketHandler handler) { + handler.setForm(UIForms.REMOVE_SERVER); + ModalFormRequestPacket mf = new ModalFormRequestPacket(); + mf.setFormId(REMOVE_SERVER); + + JsonObject out = UIComponents.createForm("form", "Are you sure?"); + out.addProperty("content", ""); + + JsonArray buttons = new JsonArray(); + + buttons.add(UIComponents.createButton("Yes, remove")); + buttons.add(UIComponents.createButton("No")); + out.add("buttons", buttons); + + mf.setFormData(out.toString()); + + return mf; + } + + /** public static ModalFormRequestPacket createModifyServer() { + currentForm = MODIFY_SERVER; ModalFormRequestPacket mf = new ModalFormRequestPacket(); mf.setFormId(UIForms.REMOVE_SERVER); - JsonObject out = UIComponents.createForm("custom_form", "Remove Server"); + JsonObject out = UIComponents.createForm("custom_form", "Modify Server"); JsonArray inputs = new JsonArray(); @@ -75,10 +112,10 @@ public class UIForms { mf.setFormData(out.toString()); return mf; - } + } **/ - public static ModalFormRequestPacket createError(String text) { - currentForm = ERROR; + public static ModalFormRequestPacket createError(String text, PacketHandler handler) { + handler.setForm(UIForms.ERROR); ModalFormRequestPacket mf = new ModalFormRequestPacket(); mf.setFormId(UIForms.ERROR); JsonObject form = new JsonObject(); @@ -91,8 +128,8 @@ public class UIForms { return mf; } - public static ModalFormRequestPacket createDonatelink() { - currentForm = DONATION; + public static ModalFormRequestPacket createDonatelink(PacketHandler handler) { + handler.setForm(UIForms.DONATION); ModalFormRequestPacket mf = new ModalFormRequestPacket(); mf.setFormId(UIForms.DONATION); JsonObject form = new JsonObject(); diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java index cf68236..113f24e 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java @@ -52,6 +52,13 @@ public class PacketHandler implements BedrockPacketHandler { private JSONObject skinData; private ArrayNode chainData; + private String selectedServer; + private int currentForm; + + public void setForm(int form) { + currentForm = form; + } + private boolean print = false; private boolean packetListening; @@ -928,21 +935,19 @@ public class PacketHandler implements BedrockPacketHandler { System.out.println(packet.toString()); switch (packet.getFormId()) { case UIForms.MAIN: - if(UIForms.currentForm == UIForms.MAIN) { + if(currentForm == UIForms.MAIN) { // If exiting main window if (packet.getFormData().contains("null")) { session.disconnect("Exiting Server List"); } else { // If selecting button int chosen = Integer.parseInt(packet.getFormData().replaceAll("\\s+","")); if (chosen == 0) { // Add Server - session.sendPacketImmediately(UIForms.createDirectConnect()); - } else if (chosen == 1) { // Remove Server - session.sendPacketImmediately(UIForms.createRemoveServer(server.getPlayer(uuid).getServerList())); + session.sendPacketImmediately(UIForms.createDirectConnect(this)); } else { // Choosing Server // If server chosen is a featued server - if(chosen-2 > server.getPlayer(uuid).getServerList().size()-1) { - int featuredServer = (chosen - 2) - (server.getPlayer(uuid).getServerList().size() - 1); + if(chosen-1 > server.getPlayer(uuid).getServerList().size()-1) { + int featuredServer = (chosen - 1) - (server.getPlayer(uuid).getServerList().size() - 1); switch (featuredServer) { case 1: // Hive @@ -965,19 +970,21 @@ public class PacketHandler implements BedrockPacketHandler { break; } } else { // If server chosen is not a featured server - String address = server.getPlayer(uuid).getServerList().get(chosen-2); + + String address = server.getPlayer(uuid).getServerList().get(chosen-1); if (address.split(":").length > 1) { String ip = address.split(":")[0]; String port = address.split(":")[1]; try { - transfer(ip, Integer.parseInt(port)); + selectedServer = address; + session.sendPacketImmediately(UIForms.createOpenServer(address, this)); } catch (Exception e) { - session.sendPacketImmediately(UIForms.createError("Error connecting to server. Invalid address.")); + session.sendPacketImmediately(UIForms.createError("Error opening server. Invalid address.", this)); } } else { - session.sendPacketImmediately(UIForms.createError("Invalid server address")); + session.sendPacketImmediately(UIForms.createError("Invalid server address", this)); } } } @@ -987,7 +994,7 @@ public class PacketHandler implements BedrockPacketHandler { case UIForms.DIRECT_CONNECT: try { if(packet.getFormData().contains("null")) - session.sendPacketImmediately(UIForms.createMain(server.getPlayer(uuid).getServerList())); + session.sendPacketImmediately(UIForms.createMain(server.getPlayer(uuid).getServerList(), this)); else { ArrayList data = UIComponents.getFormData(packet.getFormData()); if(data.size() > 1) { @@ -996,19 +1003,19 @@ public class PacketHandler implements BedrockPacketHandler { data.set(1, data.get(1).replaceAll("\\s","")); if(data.get(0).length() >= 253) - session.sendPacketImmediately(UIForms.createError("Address is too large. (Must be less than 253)")); + session.sendPacketImmediately(UIForms.createError("Address is too large. (Must be less than 253)", this)); else if(data.get(1).length() >= 10) - session.sendPacketImmediately(UIForms.createError("Port is too large. (Must be less than 10)")); + session.sendPacketImmediately(UIForms.createError("Port is too large. (Must be less than 10)", this)); else if (!data.get(0).matches("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$") && !data.get(0).matches("^((?!-)[A-Za-z0-9-]{1,63}(? serverList = server.getPlayer(uuid).getServerList(); if (serverList.size() >= server.getPlayer(uuid).getServerLimit()) - session.sendPacketImmediately(UIForms.createError("You have hit your serverlist limit of " + server.getPlayer(uuid).getServerLimit() + " servers. Remove some to add more.")); + session.sendPacketImmediately(UIForms.createError("You have hit your serverlist limit of " + server.getPlayer(uuid).getServerLimit() + " servers. Remove some to add more.", this)); else { serverList.add(data.get(0) + ":" + data.get(1)); server.getPlayer(uuid).setServerList(serverList); @@ -1024,34 +1031,62 @@ public class PacketHandler implements BedrockPacketHandler { } } } catch(Exception e) { - session.sendPacketImmediately(UIForms.createError("Please enter a valid IP/Address and port that contains only numbers.")); + session.sendPacketImmediately(UIForms.createError("Please enter a valid IP/Address and port that contains only numbers.", this)); + } + break; + case UIForms.OPEN_SERVER: + if(packet.getFormData().contains("null")) { + session.sendPacketImmediately(UIForms.createMain(server.getPlayer(uuid).getServerList(), this)); + } + else { + int chosen = Integer.parseInt(packet.getFormData().replaceAll("\\s+", "")); + if (chosen == 0) { // Connect + + if (selectedServer != null && selectedServer.split(":").length > 1) { + String ip = selectedServer.split(":")[0]; + String port = selectedServer.split(":")[1]; + + try { + transfer(ip, Integer.parseInt(port)); + } catch (Exception e) { + session.sendPacketImmediately(UIForms.createError("Error opening server. Invalid address.", this)); + } + } else { + session.sendPacketImmediately(UIForms.createError("Invalid server address", this)); + } + } else if (chosen == 1) { // Modify Server + // session.sendPacketImmediately(UIForms.createRemoveServer(server.getPlayer(uuid).getServerList())); + } else if (chosen == 2) { // Remove Server + session.sendPacketImmediately(UIForms.createRemoveServer(this)); + } } break; case UIForms.REMOVE_SERVER: try { if(packet.getFormData().contains("null")) - session.sendPacketImmediately(UIForms.createMain(server.getPlayer(uuid).getServerList())); + session.sendPacketImmediately(UIForms.createOpenServer(selectedServer, this)); else { - ArrayList data = UIComponents.getFormData(packet.getFormData()); + int chosen = Integer.parseInt(packet.getFormData().replaceAll("\\s+", "")); + if (chosen == 0) { // Yes, remove + List serverList = server.getPlayer(uuid).getServerList(); + serverList.remove(serverList.indexOf(selectedServer)); - int chosen = Integer.parseInt(data.get(0)); + server.getPlayer(uuid).setServerList(serverList); - List serverList = server.getPlayer(uuid).getServerList(); - serverList.remove(chosen); - - server.getPlayer(uuid).setServerList(serverList); - - session.sendPacketImmediately(UIForms.createMain(serverList)); + session.sendPacketImmediately(UIForms.createMain(serverList, this)); + } else if (chosen == 1) { // No + session.sendPacketImmediately(UIForms.createOpenServer(selectedServer, this)); + } } } catch(Exception e) { - session.sendPacketImmediately(UIForms.createError("Invalid server to remove")); + session.sendPacketImmediately(UIForms.createError("Invalid server to remove", this)); } break; case UIForms.ERROR: - session.sendPacketImmediately(UIForms.createMain(server.getPlayer(uuid).getServerList())); + session.sendPacketImmediately(UIForms.createMain(server.getPlayer(uuid).getServerList(), this)); break; case UIForms.DONATION: - session.sendPacketImmediately(UIForms.createMain(server.getPlayer(uuid).getServerList())); + session.sendPacketImmediately(UIForms.createMain(server.getPlayer(uuid).getServerList(), this)); break; } return false; @@ -1068,7 +1103,7 @@ public class PacketHandler implements BedrockPacketHandler { public boolean handle(SetLocalPlayerAsInitializedPacket packet) { if(print) System.out.println(packet.toString()); - session.sendPacketImmediately(UIForms.createMain(server.getPlayer(uuid).getServerList())); + session.sendPacketImmediately(UIForms.createMain(server.getPlayer(uuid).getServerList(), this)); return false; } -- cgit v1.2.1