From 3ef199419596704e78b2f2f6a646a70972227040 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Tue, 8 Jun 2021 15:14:37 -0400 Subject: [PATCH] Update to 1.17 --- pom.xml | 8 +- .../org/geysermc/connect/PacketHandler.java | 29 +-- .../org/geysermc/connect/ui/UIHandler.java | 186 +++++++++--------- .../org/geysermc/connect/utils/Player.java | 12 +- .../org/geysermc/connect/utils/Server.java | 6 +- 5 files changed, 121 insertions(+), 120 deletions(-) diff --git a/pom.xml b/pom.xml index 71ba4ae..f990e6e 100644 --- a/pom.xml +++ b/pom.xml @@ -62,18 +62,18 @@ org.projectlombok lombok - 1.18.4 + 1.18.20 provided org.geysermc connector - 1.2.1-SNAPSHOT + 1.4.0-SNAPSHOT com.github.CloudburstMC.Protocol - bedrock-v431 - f8ecf54 + bedrock-v440 + 1656151 compile diff --git a/src/main/java/org/geysermc/connect/PacketHandler.java b/src/main/java/org/geysermc/connect/PacketHandler.java index f40e778..0ffac64 100644 --- a/src/main/java/org/geysermc/connect/PacketHandler.java +++ b/src/main/java/org/geysermc/connect/PacketHandler.java @@ -38,9 +38,6 @@ import com.nukkitx.protocol.bedrock.data.AttributeData; import com.nukkitx.protocol.bedrock.handler.BedrockPacketHandler; import com.nukkitx.protocol.bedrock.packet.*; import com.nukkitx.protocol.bedrock.util.EncryptionUtils; -import org.geysermc.common.window.FormWindow; -import org.geysermc.common.window.response.CustomFormResponse; -import org.geysermc.common.window.response.SimpleFormResponse; import org.geysermc.connect.ui.FormID; import org.geysermc.connect.ui.UIHandler; import org.geysermc.connect.utils.Player; @@ -50,6 +47,10 @@ import org.geysermc.connector.network.BedrockProtocol; import org.geysermc.connector.network.session.auth.BedrockClientData; import org.geysermc.connector.utils.AttributeUtils; import org.geysermc.connector.utils.FileUtils; +import org.geysermc.cumulus.Form; +import org.geysermc.cumulus.response.CustomFormResponse; +import org.geysermc.cumulus.response.FormResponse; +import org.geysermc.cumulus.response.SimpleFormResponse; import java.io.File; import java.io.IOException; @@ -267,11 +268,11 @@ public class PacketHandler implements BedrockPacketHandler { return false; // Fetch the form and parse the response - FormWindow window = player.getCurrentWindow(); - window.setResponse(packet.getFormData().trim()); + Form window = player.getCurrentWindow(); + FormResponse response = window.parseResponse(packet.getFormData().trim()); // Resend the form if they closed it - if (window.getResponse() == null && !id.isHandlesNull()) { + if (!response.isCorrect() && !id.isHandlesNull()) { player.resendWindow(); } else { // Send the response to the correct response function @@ -281,35 +282,35 @@ public class PacketHandler implements BedrockPacketHandler { break; case MAIN: - UIHandler.handleMainMenuResponse(player, (SimpleFormResponse) window.getResponse()); + UIHandler.handleMainMenuResponse(player, (SimpleFormResponse) response); break; case LIST_SERVERS: - UIHandler.handleServerListResponse(player, (SimpleFormResponse) window.getResponse()); + UIHandler.handleServerListResponse(player, (SimpleFormResponse) response); break; case DIRECT_CONNECT: - UIHandler.handleDirectConnectResponse(player, (CustomFormResponse) window.getResponse()); + UIHandler.handleDirectConnectResponse(player, (CustomFormResponse) response); break; case EDIT_SERVERS: - UIHandler.handleEditServerListResponse(player, (SimpleFormResponse) window.getResponse()); + UIHandler.handleEditServerListResponse(player, (SimpleFormResponse) response); break; case ADD_SERVER: - UIHandler.handleAddServerResponse(player, (CustomFormResponse) window.getResponse()); + UIHandler.handleAddServerResponse(player, (CustomFormResponse) response); break; case SERVER_OPTIONS: - UIHandler.handleServerOptionsResponse(player, (SimpleFormResponse) window.getResponse()); + UIHandler.handleServerOptionsResponse(player, (SimpleFormResponse) response); break; case REMOVE_SERVER: - UIHandler.handleServerRemoveResponse(player, (SimpleFormResponse) window.getResponse()); + UIHandler.handleServerRemoveResponse(player, (SimpleFormResponse) response); break; case EDIT_SERVER: - UIHandler.handleEditServerResponse(player, (CustomFormResponse) window.getResponse()); + UIHandler.handleEditServerResponse(player, (CustomFormResponse) response); break; default: diff --git a/src/main/java/org/geysermc/connect/ui/UIHandler.java b/src/main/java/org/geysermc/connect/ui/UIHandler.java index 0d9cb46..0533b61 100644 --- a/src/main/java/org/geysermc/connect/ui/UIHandler.java +++ b/src/main/java/org/geysermc/connect/ui/UIHandler.java @@ -25,21 +25,19 @@ package org.geysermc.connect.ui; -import org.geysermc.common.window.CustomFormBuilder; -import org.geysermc.common.window.CustomFormWindow; -import org.geysermc.common.window.FormWindow; -import org.geysermc.common.window.SimpleFormWindow; -import org.geysermc.common.window.button.FormButton; -import org.geysermc.common.window.button.FormImage; -import org.geysermc.common.window.component.InputComponent; -import org.geysermc.common.window.component.LabelComponent; -import org.geysermc.common.window.component.ToggleComponent; -import org.geysermc.common.window.response.CustomFormResponse; -import org.geysermc.common.window.response.SimpleFormResponse; import org.geysermc.connect.MasterServer; import org.geysermc.connect.utils.Player; import org.geysermc.connect.utils.Server; import org.geysermc.connect.utils.ServerCategory; +import org.geysermc.cumulus.CustomForm; +import org.geysermc.cumulus.Form; +import org.geysermc.cumulus.SimpleForm; +import org.geysermc.cumulus.component.InputComponent; +import org.geysermc.cumulus.component.LabelComponent; +import org.geysermc.cumulus.component.ToggleComponent; +import org.geysermc.cumulus.response.CustomFormResponse; +import org.geysermc.cumulus.response.SimpleFormResponse; +import org.geysermc.cumulus.util.FormImage; import java.util.List; @@ -48,23 +46,23 @@ public class UIHandler { /** * Create a list of servers for the client based on the passed servers list * - * @return A {@link SimpleFormWindow} object + * @return A {@link SimpleForm} object */ - public static FormWindow getMainMenu() { - SimpleFormWindow window = new SimpleFormWindow("Main Menu", ""); + public static Form getMainMenu() { + SimpleForm.Builder window = SimpleForm.builder().title("Main Menu"); - window.getButtons().add(new FormButton("Official Servers")); - window.getButtons().add(new FormButton("Geyser Servers")); + window.button("Official Servers"); + window.button("Geyser Servers"); // Add a buttons for custom servers if (MasterServer.getInstance().getGeyserConnectConfig().getCustomServers().isEnabled()) { - window.getButtons().add(new FormButton("Custom Servers")); - window.getButtons().add(new FormButton("Direct connect")); + window.button("Custom Servers"); + window.button("Direct connect"); } - window.getButtons().add(new FormButton("Disconnect")); + window.button("Disconnect"); - return window; + return window.build(); } /** @@ -72,49 +70,49 @@ public class UIHandler { * * @param servers A list of {@link Server} objects * @param category The category of the current list - * @return A {@link SimpleFormWindow} object + * @return A {@link SimpleForm} object */ - public static FormWindow getServerList(List servers, ServerCategory category) { - SimpleFormWindow window = new SimpleFormWindow(category.getTitle() + " Servers", ""); + public static Form getServerList(List servers, ServerCategory category) { + SimpleForm.Builder window = SimpleForm.builder().title(category.getTitle() + " Servers"); // Add a button for each global server for (Server server : servers) { // These images would be better if there was a default to fall back on // But that would require a web api as bedrock doesn't support doing that - window.getButtons().add(new FormButton(server.toString(), server.getFormImage())); + window.button(server.toString(), server.getFormImage()); } // Add a button for editing if (category == ServerCategory.CUSTOM) { - window.getButtons().add(new FormButton("Edit servers")); + window.button("Edit servers"); } - window.getButtons().add(new FormButton("Back")); + window.button("Back"); - return window; + return window.build(); } /** * Create a simple connecting message form * * @param server The server info to display - * @return A {@link SimpleFormWindow} object + * @return A {@link SimpleForm} object */ - public static FormWindow getWaitingScreen(Server server) { - return new SimpleFormWindow("Connecting", "Please wait while we connect you to " + server.toString()); + public static Form getWaitingScreen(Server server) { + return SimpleForm.builder().title("Connecting").content("Please wait while we connect you to " + server.toString()).build(); } /** * Create a direct connect form * - * @return A {@link CustomFormWindow} object + * @return A {@link CustomForm} object */ - public static FormWindow getDirectConnect() { - return new CustomFormBuilder("Direct Connect") - .addComponent(new InputComponent("IP", "play.cubecraft.net", "")) - .addComponent(new InputComponent("Port", "25565", "25565")) - .addComponent(new ToggleComponent("Online mode", true)) - .addComponent(new ToggleComponent("Bedrock/Geyser server", false)) + public static Form getDirectConnect() { + return CustomForm.builder().title("Direct Connect") + .component(InputComponent.of("IP", "play.cubecraft.net")) + .component(InputComponent.of("Port", "25565", "25565")) + .component(ToggleComponent.of("Online mode", true)) + .component(ToggleComponent.of("Bedrock/Geyser server", false)) .build(); } @@ -122,33 +120,34 @@ public class UIHandler { * Create a list of servers for the client to edit * * @param servers A list of {@link Server} objects - * @return A {@link SimpleFormWindow} object + * @return A {@link SimpleForm} object */ - public static FormWindow getEditServerList(List servers) { - SimpleFormWindow window = new SimpleFormWindow("Edit Servers", "Select a server to edit"); + public static Form getEditServerList(List servers) { + SimpleForm.Builder window = SimpleForm.builder().title("Edit Servers").content("Select a server to edit"); // Add a button for each personal server for (Server server : servers) { - window.getButtons().add(new FormButton(server.toString(), new FormImage(FormImage.FormImageType.URL, "https://eu.mc-api.net/v3/server/favicon/" + server.getAddress() + ":" + server.getPort() + ".png"))); + window.button(server.toString(), FormImage.of(FormImage.Type.URL, + "https://eu.mc-api.net/v3/server/favicon/" + server.getAddress() + ":" + server.getPort() + ".png")); } - window.getButtons().add(new FormButton("Add server")); - window.getButtons().add(new FormButton("Back")); + window.button("Add server"); + window.button("Back"); - return window; + return window.build(); } /** * Create a add server form * - * @return A {@link CustomFormWindow} object + * @return A {@link CustomForm} object */ - public static FormWindow getAddServer() { - return new CustomFormBuilder("Add Server") - .addComponent(new InputComponent("IP", "play.cubecraft.net", "")) - .addComponent(new InputComponent("Port", "25565", "25565")) - .addComponent(new ToggleComponent("Online mode", true)) - .addComponent(new ToggleComponent("Bedrock/Geyser server", false)) + public static Form getAddServer() { + return CustomForm.builder().title("Add Server") + .component(InputComponent.of("IP", "play.cubecraft.net")) + .component(InputComponent.of("Port", "25565", "25565")) + .component(ToggleComponent.of("Online mode", true)) + .component(ToggleComponent.of("Bedrock/Geyser server", false)) .build(); } @@ -156,47 +155,47 @@ public class UIHandler { * Create a server options form * * @param server A {@link Server} object to show options for - * @return A {@link SimpleFormWindow} object + * @return A {@link SimpleForm} object */ - public static FormWindow getServerOptions(Server server) { - SimpleFormWindow window = new SimpleFormWindow("Server Options", server.toString()); + public static Form getServerOptions(Server server) { + SimpleForm.Builder window = SimpleForm.builder().title("Server Options").content(server.toString()); - window.getButtons().add(new FormButton("Edit")); - window.getButtons().add(new FormButton("Remove")); - window.getButtons().add(new FormButton("Back")); + window.button("Edit"); + window.button("Remove"); + window.button("Back"); - return window; + return window.build(); } /** * Create a remove server form * * @param server A {@link Server} object to remove - * @return A {@link SimpleFormWindow} object + * @return A {@link SimpleForm} object */ - public static FormWindow getRemoveServer(Server server) { - SimpleFormWindow window = new SimpleFormWindow("Remove Server", "Are you sure you want to remove server: " + server.toString()); - - window.getButtons().add(new FormButton("Remove")); - window.getButtons().add(new FormButton("Cancel")); - - return window; + public static Form getRemoveServer(Server server) { + return SimpleForm.builder() + .title("Remove Server") + .content("Are you sure you want to remove server: " + server) + .button("Remove") + .button("Cancel") + .build(); } /** * Create a edit server form * * @param server A {@link Server} object to edit - * @return A {@link CustomFormWindow} object + * @return A {@link CustomForm} object */ - public static FormWindow getEditServer(int serverIndex, Server server) { + public static Form getEditServer(int serverIndex, Server server) { String port = String.valueOf(server.getPort()); - return new CustomFormBuilder("Edit Server") - .addComponent(new LabelComponent("Server at index: " + serverIndex)) - .addComponent(new InputComponent("IP", server.getAddress(), server.getAddress())) - .addComponent(new InputComponent("Port", port, port)) - .addComponent(new ToggleComponent("Online mode", server.isOnline())) - .addComponent(new ToggleComponent("Bedrock/Geyser server", server.isBedrock())) + return CustomForm.builder() + .component(LabelComponent.of("Server at index: " + serverIndex)) + .component(InputComponent.of("IP", server.getAddress(), server.getAddress())) + .component(InputComponent.of("Port", port, port)) + .component(ToggleComponent.of("Online mode", server.isOnline())) + .component(ToggleComponent.of("Bedrock/Geyser server", server.isBedrock())) .build(); } @@ -204,11 +203,12 @@ public class UIHandler { * Show a basic form window with a message * * @param message The message to display - * @return A {@link CustomFormWindow} object + * @return A {@link CustomForm} object */ - public static FormWindow getMessageWindow(String message) { - return new CustomFormBuilder("Notice") - .addComponent(new LabelComponent(message)) + public static Form getMessageWindow(String message) { + return CustomForm.builder() + .title("Notice") + .component(LabelComponent.of(message)) .build(); } @@ -300,10 +300,10 @@ public class UIHandler { } try { - String address = data.getInputResponses().get(0); - int port = Integer.parseInt(data.getInputResponses().get(1)); - boolean online = data.getToggleResponses().get(2); - boolean bedrock = data.getToggleResponses().get(3); + String address = data.getInput(0); + int port = Integer.parseInt(data.getInput(1)); + boolean online = data.getToggle(2); + boolean bedrock = data.getToggle(3); // Make sure we got an address if (address == null || "".equals(address)) { @@ -362,10 +362,10 @@ public class UIHandler { } try { - String address = data.getInputResponses().get(0); - int port = Integer.parseInt(data.getInputResponses().get(1)); - boolean online = data.getToggleResponses().get(2); - boolean bedrock = data.getToggleResponses().get(3); + String address = data.getInput(0); + int port = Integer.parseInt(data.getInput(1)); + boolean online = data.getToggle(2); + boolean bedrock = data.getToggle(3); // Make sure we got an address if (address == null || "".equals(address)) { @@ -401,7 +401,7 @@ public class UIHandler { return; } - SimpleFormWindow window = (SimpleFormWindow) player.getCurrentWindow(); + SimpleForm window = (SimpleForm) player.getCurrentWindow(); Server selectedServer = null; for (Server server : player.getServers()) { if (server.toString().equals(window.getContent())) { @@ -437,7 +437,7 @@ public class UIHandler { * @param data The form response data */ public static void handleServerRemoveResponse(Player player, SimpleFormResponse data) { - SimpleFormWindow window = (SimpleFormWindow) player.getCurrentWindow(); + SimpleForm window = (SimpleForm) player.getCurrentWindow(); String serverName = window.getContent().split(":")[1].trim(); Server selectedServer = null; for (Server server : player.getServers()) { @@ -474,12 +474,12 @@ public class UIHandler { } try { - int serverIndex = Integer.parseInt(data.getLabelResponses().get(0).split(":")[1].trim()); + int serverIndex = Integer.parseInt(data.getInput(0).split(":")[1].trim()); - String address = data.getInputResponses().get(1); - int port = Integer.parseInt(data.getInputResponses().get(2)); - boolean online = data.getToggleResponses().get(3); - boolean bedrock = data.getToggleResponses().get(4); + String address = data.getInput(1); + int port = Integer.parseInt(data.getInput(2)); + boolean online = data.getToggle(3); + boolean bedrock = data.getToggle(4); // Make sure we got an address if (address == null || "".equals(address)) { diff --git a/src/main/java/org/geysermc/connect/utils/Player.java b/src/main/java/org/geysermc/connect/utils/Player.java index 725de67..0cdc77b 100644 --- a/src/main/java/org/geysermc/connect/utils/Player.java +++ b/src/main/java/org/geysermc/connect/utils/Player.java @@ -37,11 +37,11 @@ import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import lombok.Getter; import lombok.Setter; -import org.geysermc.common.window.FormWindow; import org.geysermc.connect.MasterServer; import org.geysermc.connect.ui.FormID; import org.geysermc.connect.ui.UIHandler; import org.geysermc.connector.network.session.auth.BedrockClientData; +import org.geysermc.cumulus.Form; import java.util.ArrayList; import java.util.List; @@ -59,7 +59,7 @@ public class Player { private final List servers = new ArrayList<>(); private final Long2ObjectMap forms = new Long2ObjectOpenHashMap<>(); - private FormWindow currentWindow; + private Form currentWindow; private FormID currentWindowId; @Setter @@ -133,7 +133,7 @@ public class Player { startGamePacket.setCurrentTick(0); startGamePacket.setEnchantmentSeed(0); startGamePacket.setMultiplayerCorrelationId(""); - startGamePacket.setAuthoritativeMovementMode(AuthoritativeMovementMode.CLIENT); + startGamePacket.setServerEngine(""); SyncedPlayerMovementSettings settings = new SyncedPlayerMovementSettings(); settings.setMovementMode(AuthoritativeMovementMode.CLIENT); @@ -180,15 +180,15 @@ public class Player { * Also cache it against the player for later use * * @param id The {@link FormID} to use for the form - * @param window The {@link FormWindow} to turn into json and send + * @param window The {@link Form} to turn into json and send */ - public void sendWindow(FormID id, FormWindow window) { + public void sendWindow(FormID id, Form window) { this.currentWindow = window; this.currentWindowId = id; ModalFormRequestPacket modalFormRequestPacket = new ModalFormRequestPacket(); modalFormRequestPacket.setFormId(id.ordinal()); - modalFormRequestPacket.setFormData(window.getJSONData()); + modalFormRequestPacket.setFormData(window.getJsonData()); session.sendPacket(modalFormRequestPacket); // This packet is used to fix the image loading bug diff --git a/src/main/java/org/geysermc/connect/utils/Server.java b/src/main/java/org/geysermc/connect/utils/Server.java index b3ef37c..a7da7a2 100644 --- a/src/main/java/org/geysermc/connect/utils/Server.java +++ b/src/main/java/org/geysermc/connect/utils/Server.java @@ -29,7 +29,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import org.geysermc.common.window.button.FormImage; +import org.geysermc.cumulus.util.FormImage; @Getter @AllArgsConstructor @@ -80,9 +80,9 @@ public class Server { @JsonIgnore public FormImage getFormImage() { if (imageUrl != null && !imageUrl.isEmpty()) { - return new FormImage(FormImage.FormImageType.URL, imageUrl); + return FormImage.of(FormImage.Type.URL, imageUrl); } else { - return new FormImage(FormImage.FormImageType.URL, "https://eu.mc-api.net/v3/server/favicon/" + address + ":" + port + ".png?use-fallback-icon=true"); + return FormImage.of(FormImage.Type.URL, "https://eu.mc-api.net/v3/server/favicon/" + address + ":" + port + ".png?use-fallback-icon=true"); } } }