summaryrefslogtreecommitdiff
path: root/serverlist-server
diff options
context:
space:
mode:
authorPugmatt <pugmatt@gmail.com>2019-06-25 23:47:55 -0400
committerPugmatt <pugmatt@gmail.com>2019-06-25 23:47:55 -0400
commit94cf5ee822b35ca89cb87f4ba37c5c5741dc1fe8 (patch)
tree9950d3bb348d6240695b299f476058ffbcbd64cb /serverlist-server
parent67b72aef798ba8334dd25e4414804adc9202494d (diff)
downloadBedrockConnect-94cf5ee822b35ca89cb87f4ba37c5c5741dc1fe8.tar.gz
BedrockConnect-94cf5ee822b35ca89cb87f4ba37c5c5741dc1fe8.tar.bz2
BedrockConnect-94cf5ee822b35ca89cb87f4ba37c5c5741dc1fe8.zip
Add Remove form and backend code
Diffstat (limited to 'serverlist-server')
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java6
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIForms.java52
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java75
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;