diff options
| author | Pugmatt <pugmatt@gmail.com> | 2019-06-25 23:47:55 -0400 |
|---|---|---|
| committer | Pugmatt <pugmatt@gmail.com> | 2019-06-25 23:47:55 -0400 |
| commit | 94cf5ee822b35ca89cb87f4ba37c5c5741dc1fe8 (patch) | |
| tree | 9950d3bb348d6240695b299f476058ffbcbd64cb /serverlist-server | |
| parent | 67b72aef798ba8334dd25e4414804adc9202494d (diff) | |
| download | BedrockConnect-94cf5ee822b35ca89cb87f4ba37c5c5741dc1fe8.tar.gz BedrockConnect-94cf5ee822b35ca89cb87f4ba37c5c5741dc1fe8.tar.bz2 BedrockConnect-94cf5ee822b35ca89cb87f4ba37c5c5741dc1fe8.zip | |
Add Remove form and backend code
Diffstat (limited to 'serverlist-server')
3 files changed, 113 insertions, 20 deletions
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java index 22095ae..d47de44 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java @@ -83,7 +83,11 @@ public class UIComponents { public static JsonObject createDropdown(List<String> options, String title, String defaultIndex) { JsonObject dropdown = new JsonObject(); dropdown.addProperty("type", "dropdown"); - dropdown.addProperty("options", serversToFormData(options)); + JsonArray servers = new JsonArray(); + for(int i=0;i<options.size();i++) { + servers.add(options.get(i)); + } + dropdown.add("options", servers); dropdown.addProperty("text", title); dropdown.addProperty("defaultOptionIndex", defaultIndex); return dropdown; 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 90d93e7..e426f3e 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 @@ -4,12 +4,16 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.nukkitx.protocol.bedrock.packet.ModalFormRequestPacket; +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; + public static final int ERROR = 2, MAIN = 0, DIRECT_CONNECT = 1, REMOVE_SERVER = 3; public static int currentForm = 0; - public static ModalFormRequestPacket createMain() { + public static ModalFormRequestPacket createMain(List<String> servers) { currentForm = MAIN; ModalFormRequestPacket mf = new ModalFormRequestPacket(); mf.setFormId(UIForms.MAIN); @@ -19,10 +23,11 @@ public class UIForms { JsonArray buttons = new JsonArray(); - buttons.add(UIComponents.createButton("Direct Connect")); - buttons.add(UIComponents.createButton("Play.SkyBlockpe.com:19132", "https://i.imgur.com/3BmFZRE.png", "url")); - buttons.add(UIComponents.createButton("Add Server")); - buttons.add(UIComponents.createButton("Remove Server")); + buttons.add(UIComponents.createButton("Connect to a Server")); + buttons.add(UIComponents.createButton("Remove a Server")); + for(int i=0;i<servers.size();i++) { + buttons.add(UIComponents.createButton(servers.get(i), "https://i.imgur.com/3BmFZRE.png", "url")); + } out.add("buttons", buttons); @@ -35,16 +40,47 @@ public class UIForms { currentForm = DIRECT_CONNECT; ModalFormRequestPacket mf = new ModalFormRequestPacket(); mf.setFormId(UIForms.DIRECT_CONNECT); - JsonObject out = UIComponents.createForm("custom_form", "Add Server"); + JsonObject out = UIComponents.createForm("custom_form", "Connect to a Server"); JsonArray inputs = new JsonArray(); inputs.add(UIComponents.createInput("Server Address", "Please enter IP or Address")); - inputs.add(UIComponents.createInput("Server Port", "Please enter Port (E.g. 19132)")); + inputs.add(UIComponents.createInput("Server Port", "Please enter Port", "19132")); + inputs.add(UIComponents.createToggle("Add to server list")); + + out.add("content", inputs); + mf.setFormData(out.toString()); + + return mf; + } + + public static ModalFormRequestPacket createRemoveServer(List<String> servers) { + currentForm = REMOVE_SERVER; + ModalFormRequestPacket mf = new ModalFormRequestPacket(); + mf.setFormId(UIForms.REMOVE_SERVER); + JsonObject out = UIComponents.createForm("custom_form", "Remove Server"); + + JsonArray inputs = new JsonArray(); + + inputs.add(UIComponents.createDropdown(servers,"Servers", "0")); out.add("content", inputs); mf.setFormData(out.toString()); return mf; } + + public static ModalFormRequestPacket createError(String text) { + currentForm = ERROR; + ModalFormRequestPacket mf = new ModalFormRequestPacket(); + mf.setFormId(UIForms.ERROR); + JsonObject form = new JsonObject(); + form.addProperty("type", "custom_form"); + form.addProperty("title", "Error"); + JsonArray content = new JsonArray(); + content.add(UIComponents.createLabel(text)); + form.add("content", content); + mf.setFormData(form.toString()); + return mf; + } } 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 00d41f8..e162ec0 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 @@ -223,14 +223,24 @@ public class PacketHandler implements BedrockPacketHandler { if (chosen == 0) { // Add Server session.sendPacketImmediately(UIForms.createDirectConnect()); } else if (chosen == 1) { // Remove Server - session.sendPacketImmediately(UIForms.createDirectConnect()); + session.sendPacketImmediately(UIForms.createRemoveServer(server.getPlayer(uuid).getServerList())); } else { // Choosing Server - List<String> servers = new ArrayList<>(); - servers.add("Play.SkyBlockpe.com:19132"); - TransferPacket tp = new TransferPacket(); - tp.setAddress("Play.SkyBlockpe.com"); - tp.setPort(19132); - session.sendPacketImmediately(tp); + String address = server.getPlayer(uuid).getServerList().get(chosen-2); + if(address.split(":").length > 1) { + String ip = address.split(":")[0]; + String port = address.split(":")[1]; + + try { + TransferPacket tp = new TransferPacket(); + tp.setAddress(ip); + tp.setPort(Integer.parseInt(port)); + session.sendPacketImmediately(tp); + } catch(Exception e) { + session.sendPacketImmediately(UIForms.createError("Error connecting to server. Invalid address.")); + } + } else { + session.sendPacketImmediately(UIForms.createError("Invalid server address")); + } } } } @@ -241,15 +251,58 @@ public class PacketHandler implements BedrockPacketHandler { session.sendPacketImmediately(UIForms.createMain(server.getPlayer(uuid).getServerList())); else { ArrayList<String> data = UIComponents.getFormData(packet.getFormData()); - TransferPacket tp = new TransferPacket(); - tp.setAddress(data.get(0).replace(" ", "")); - tp.setPort(Integer.parseInt(data.get(1))); - session.sendPacketImmediately(tp); + if(data.size() > 1) { + if (!data.get(0).matches("[a-zA-Z.1-9]+")) + session.sendPacketImmediately(UIForms.createError("Enter a valid address. (E.g. play.example.net, 172.16.254.1)")); + else if (!data.get(1).matches("[1-9]+")) + session.sendPacketImmediately(UIForms.createError("Enter a valid port that contains only numbers")); + else { + boolean addServer = Boolean.parseBoolean(data.get(2)); + if (addServer) { + List<String> serverList = server.getPlayer(uuid).getServerList(); + if (serverList.size() >= server.getPlayer(uuid).getServerLimit()) + session.sendPacketImmediately(UIForms.createError("You have it your serverlist limit of " + server.getPlayer(uuid).getServerLimit() + " servers. Remove some to add more.")); + else { + serverList.add(data.get(0) + ":" + data.get(1)); + server.getPlayer(uuid).setServerList(serverList); + TransferPacket tp = new TransferPacket(); + tp.setAddress(data.get(0).replace(" ", "")); + tp.setPort(Integer.parseInt(data.get(1))); + session.sendPacketImmediately(tp); + } + } else { + TransferPacket tp = new TransferPacket(); + tp.setAddress(data.get(0).replace(" ", "")); + tp.setPort(Integer.parseInt(data.get(1))); + session.sendPacketImmediately(tp); + } + } + } } } catch(Exception e) { session.sendPacketImmediately(UIForms.createError("Please enter a valid IP/Address and port that contains only numbers.")); } break; + case UIForms.REMOVE_SERVER: + try { + if(packet.getFormData().contains("null")) + session.sendPacketImmediately(UIForms.createMain(server.getPlayer(uuid).getServerList())); + else { + ArrayList<String> data = UIComponents.getFormData(packet.getFormData()); + + int chosen = Integer.parseInt(data.get(0)); + + List<String> serverList = server.getPlayer(uuid).getServerList(); + serverList.remove(chosen); + + server.getPlayer(uuid).setServerList(serverList); + + session.sendPacketImmediately(UIForms.createMain(serverList)); + } + } catch(Exception e) { + session.sendPacketImmediately(UIForms.createError("Invalid server to remove")); + } + break; case UIForms.ERROR: session.sendPacketImmediately(UIForms.createMain(server.getPlayer(uuid).getServerList())); break; |
