Update to 1.17

This commit is contained in:
Camotoy 2021-06-08 15:14:37 -04:00
parent 2932a3edc0
commit 3ef1994195
No known key found for this signature in database
GPG key ID: 7EEFB66FE798081F
5 changed files with 121 additions and 120 deletions

View file

@ -62,18 +62,18 @@
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.4</version> <version>1.18.20</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>connector</artifactId> <artifactId>connector</artifactId>
<version>1.2.1-SNAPSHOT</version> <version>1.4.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.github.CloudburstMC.Protocol</groupId> <groupId>com.github.CloudburstMC.Protocol</groupId>
<artifactId>bedrock-v431</artifactId> <artifactId>bedrock-v440</artifactId>
<version>f8ecf54</version> <version>1656151</version>
<scope>compile</scope> <scope>compile</scope>
<exclusions> <exclusions>
<exclusion> <exclusion>

View file

@ -38,9 +38,6 @@ import com.nukkitx.protocol.bedrock.data.AttributeData;
import com.nukkitx.protocol.bedrock.handler.BedrockPacketHandler; import com.nukkitx.protocol.bedrock.handler.BedrockPacketHandler;
import com.nukkitx.protocol.bedrock.packet.*; import com.nukkitx.protocol.bedrock.packet.*;
import com.nukkitx.protocol.bedrock.util.EncryptionUtils; 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.FormID;
import org.geysermc.connect.ui.UIHandler; import org.geysermc.connect.ui.UIHandler;
import org.geysermc.connect.utils.Player; 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.network.session.auth.BedrockClientData;
import org.geysermc.connector.utils.AttributeUtils; import org.geysermc.connector.utils.AttributeUtils;
import org.geysermc.connector.utils.FileUtils; 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.File;
import java.io.IOException; import java.io.IOException;
@ -267,11 +268,11 @@ public class PacketHandler implements BedrockPacketHandler {
return false; return false;
// Fetch the form and parse the response // Fetch the form and parse the response
FormWindow window = player.getCurrentWindow(); Form window = player.getCurrentWindow();
window.setResponse(packet.getFormData().trim()); FormResponse response = window.parseResponse(packet.getFormData().trim());
// Resend the form if they closed it // Resend the form if they closed it
if (window.getResponse() == null && !id.isHandlesNull()) { if (!response.isCorrect() && !id.isHandlesNull()) {
player.resendWindow(); player.resendWindow();
} else { } else {
// Send the response to the correct response function // Send the response to the correct response function
@ -281,35 +282,35 @@ public class PacketHandler implements BedrockPacketHandler {
break; break;
case MAIN: case MAIN:
UIHandler.handleMainMenuResponse(player, (SimpleFormResponse) window.getResponse()); UIHandler.handleMainMenuResponse(player, (SimpleFormResponse) response);
break; break;
case LIST_SERVERS: case LIST_SERVERS:
UIHandler.handleServerListResponse(player, (SimpleFormResponse) window.getResponse()); UIHandler.handleServerListResponse(player, (SimpleFormResponse) response);
break; break;
case DIRECT_CONNECT: case DIRECT_CONNECT:
UIHandler.handleDirectConnectResponse(player, (CustomFormResponse) window.getResponse()); UIHandler.handleDirectConnectResponse(player, (CustomFormResponse) response);
break; break;
case EDIT_SERVERS: case EDIT_SERVERS:
UIHandler.handleEditServerListResponse(player, (SimpleFormResponse) window.getResponse()); UIHandler.handleEditServerListResponse(player, (SimpleFormResponse) response);
break; break;
case ADD_SERVER: case ADD_SERVER:
UIHandler.handleAddServerResponse(player, (CustomFormResponse) window.getResponse()); UIHandler.handleAddServerResponse(player, (CustomFormResponse) response);
break; break;
case SERVER_OPTIONS: case SERVER_OPTIONS:
UIHandler.handleServerOptionsResponse(player, (SimpleFormResponse) window.getResponse()); UIHandler.handleServerOptionsResponse(player, (SimpleFormResponse) response);
break; break;
case REMOVE_SERVER: case REMOVE_SERVER:
UIHandler.handleServerRemoveResponse(player, (SimpleFormResponse) window.getResponse()); UIHandler.handleServerRemoveResponse(player, (SimpleFormResponse) response);
break; break;
case EDIT_SERVER: case EDIT_SERVER:
UIHandler.handleEditServerResponse(player, (CustomFormResponse) window.getResponse()); UIHandler.handleEditServerResponse(player, (CustomFormResponse) response);
break; break;
default: default:

View file

@ -25,21 +25,19 @@
package org.geysermc.connect.ui; 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.MasterServer;
import org.geysermc.connect.utils.Player; import org.geysermc.connect.utils.Player;
import org.geysermc.connect.utils.Server; import org.geysermc.connect.utils.Server;
import org.geysermc.connect.utils.ServerCategory; 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; 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 * 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() { public static Form getMainMenu() {
SimpleFormWindow window = new SimpleFormWindow("Main Menu", ""); SimpleForm.Builder window = SimpleForm.builder().title("Main Menu");
window.getButtons().add(new FormButton("Official Servers")); window.button("Official Servers");
window.getButtons().add(new FormButton("Geyser Servers")); window.button("Geyser Servers");
// Add a buttons for custom servers // Add a buttons for custom servers
if (MasterServer.getInstance().getGeyserConnectConfig().getCustomServers().isEnabled()) { if (MasterServer.getInstance().getGeyserConnectConfig().getCustomServers().isEnabled()) {
window.getButtons().add(new FormButton("Custom Servers")); window.button("Custom Servers");
window.getButtons().add(new FormButton("Direct connect")); 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 servers A list of {@link Server} objects
* @param category The category of the current list * @param category The category of the current list
* @return A {@link SimpleFormWindow} object * @return A {@link SimpleForm} object
*/ */
public static FormWindow getServerList(List<Server> servers, ServerCategory category) { public static Form getServerList(List<Server> servers, ServerCategory category) {
SimpleFormWindow window = new SimpleFormWindow(category.getTitle() + " Servers", ""); SimpleForm.Builder window = SimpleForm.builder().title(category.getTitle() + " Servers");
// Add a button for each global server // Add a button for each global server
for (Server server : servers) { for (Server server : servers) {
// These images would be better if there was a default to fall back on // 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 // 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 // Add a button for editing
if (category == ServerCategory.CUSTOM) { 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 * Create a simple connecting message form
* *
* @param server The server info to display * @param server The server info to display
* @return A {@link SimpleFormWindow} object * @return A {@link SimpleForm} object
*/ */
public static FormWindow getWaitingScreen(Server server) { public static Form getWaitingScreen(Server server) {
return new SimpleFormWindow("Connecting", "Please wait while we connect you to " + server.toString()); return SimpleForm.builder().title("Connecting").content("Please wait while we connect you to " + server.toString()).build();
} }
/** /**
* Create a direct connect form * Create a direct connect form
* *
* @return A {@link CustomFormWindow} object * @return A {@link CustomForm} object
*/ */
public static FormWindow getDirectConnect() { public static Form getDirectConnect() {
return new CustomFormBuilder("Direct Connect") return CustomForm.builder().title("Direct Connect")
.addComponent(new InputComponent("IP", "play.cubecraft.net", "")) .component(InputComponent.of("IP", "play.cubecraft.net"))
.addComponent(new InputComponent("Port", "25565", "25565")) .component(InputComponent.of("Port", "25565", "25565"))
.addComponent(new ToggleComponent("Online mode", true)) .component(ToggleComponent.of("Online mode", true))
.addComponent(new ToggleComponent("Bedrock/Geyser server", false)) .component(ToggleComponent.of("Bedrock/Geyser server", false))
.build(); .build();
} }
@ -122,33 +120,34 @@ public class UIHandler {
* Create a list of servers for the client to edit * Create a list of servers for the client to edit
* *
* @param servers A list of {@link Server} objects * @param servers A list of {@link Server} objects
* @return A {@link SimpleFormWindow} object * @return A {@link SimpleForm} object
*/ */
public static FormWindow getEditServerList(List<Server> servers) { public static Form getEditServerList(List<Server> servers) {
SimpleFormWindow window = new SimpleFormWindow("Edit Servers", "Select a server to edit"); SimpleForm.Builder window = SimpleForm.builder().title("Edit Servers").content("Select a server to edit");
// Add a button for each personal server // Add a button for each personal server
for (Server server : servers) { 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.button("Add server");
window.getButtons().add(new FormButton("Back")); window.button("Back");
return window; return window.build();
} }
/** /**
* Create a add server form * Create a add server form
* *
* @return A {@link CustomFormWindow} object * @return A {@link CustomForm} object
*/ */
public static FormWindow getAddServer() { public static Form getAddServer() {
return new CustomFormBuilder("Add Server") return CustomForm.builder().title("Add Server")
.addComponent(new InputComponent("IP", "play.cubecraft.net", "")) .component(InputComponent.of("IP", "play.cubecraft.net"))
.addComponent(new InputComponent("Port", "25565", "25565")) .component(InputComponent.of("Port", "25565", "25565"))
.addComponent(new ToggleComponent("Online mode", true)) .component(ToggleComponent.of("Online mode", true))
.addComponent(new ToggleComponent("Bedrock/Geyser server", false)) .component(ToggleComponent.of("Bedrock/Geyser server", false))
.build(); .build();
} }
@ -156,47 +155,47 @@ public class UIHandler {
* Create a server options form * Create a server options form
* *
* @param server A {@link Server} object to show options for * @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) { public static Form getServerOptions(Server server) {
SimpleFormWindow window = new SimpleFormWindow("Server Options", server.toString()); SimpleForm.Builder window = SimpleForm.builder().title("Server Options").content(server.toString());
window.getButtons().add(new FormButton("Edit")); window.button("Edit");
window.getButtons().add(new FormButton("Remove")); window.button("Remove");
window.getButtons().add(new FormButton("Back")); window.button("Back");
return window; return window.build();
} }
/** /**
* Create a remove server form * Create a remove server form
* *
* @param server A {@link Server} object to remove * @param server A {@link Server} object to remove
* @return A {@link SimpleFormWindow} object * @return A {@link SimpleForm} object
*/ */
public static FormWindow getRemoveServer(Server server) { public static Form getRemoveServer(Server server) {
SimpleFormWindow window = new SimpleFormWindow("Remove Server", "Are you sure you want to remove server: " + server.toString()); return SimpleForm.builder()
.title("Remove Server")
window.getButtons().add(new FormButton("Remove")); .content("Are you sure you want to remove server: " + server)
window.getButtons().add(new FormButton("Cancel")); .button("Remove")
.button("Cancel")
return window; .build();
} }
/** /**
* Create a edit server form * Create a edit server form
* *
* @param server A {@link Server} object to edit * @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()); String port = String.valueOf(server.getPort());
return new CustomFormBuilder("Edit Server") return CustomForm.builder()
.addComponent(new LabelComponent("Server at index: " + serverIndex)) .component(LabelComponent.of("Server at index: " + serverIndex))
.addComponent(new InputComponent("IP", server.getAddress(), server.getAddress())) .component(InputComponent.of("IP", server.getAddress(), server.getAddress()))
.addComponent(new InputComponent("Port", port, port)) .component(InputComponent.of("Port", port, port))
.addComponent(new ToggleComponent("Online mode", server.isOnline())) .component(ToggleComponent.of("Online mode", server.isOnline()))
.addComponent(new ToggleComponent("Bedrock/Geyser server", server.isBedrock())) .component(ToggleComponent.of("Bedrock/Geyser server", server.isBedrock()))
.build(); .build();
} }
@ -204,11 +203,12 @@ public class UIHandler {
* Show a basic form window with a message * Show a basic form window with a message
* *
* @param message The message to display * @param message The message to display
* @return A {@link CustomFormWindow} object * @return A {@link CustomForm} object
*/ */
public static FormWindow getMessageWindow(String message) { public static Form getMessageWindow(String message) {
return new CustomFormBuilder("Notice") return CustomForm.builder()
.addComponent(new LabelComponent(message)) .title("Notice")
.component(LabelComponent.of(message))
.build(); .build();
} }
@ -300,10 +300,10 @@ public class UIHandler {
} }
try { try {
String address = data.getInputResponses().get(0); String address = data.getInput(0);
int port = Integer.parseInt(data.getInputResponses().get(1)); int port = Integer.parseInt(data.getInput(1));
boolean online = data.getToggleResponses().get(2); boolean online = data.getToggle(2);
boolean bedrock = data.getToggleResponses().get(3); boolean bedrock = data.getToggle(3);
// Make sure we got an address // Make sure we got an address
if (address == null || "".equals(address)) { if (address == null || "".equals(address)) {
@ -362,10 +362,10 @@ public class UIHandler {
} }
try { try {
String address = data.getInputResponses().get(0); String address = data.getInput(0);
int port = Integer.parseInt(data.getInputResponses().get(1)); int port = Integer.parseInt(data.getInput(1));
boolean online = data.getToggleResponses().get(2); boolean online = data.getToggle(2);
boolean bedrock = data.getToggleResponses().get(3); boolean bedrock = data.getToggle(3);
// Make sure we got an address // Make sure we got an address
if (address == null || "".equals(address)) { if (address == null || "".equals(address)) {
@ -401,7 +401,7 @@ public class UIHandler {
return; return;
} }
SimpleFormWindow window = (SimpleFormWindow) player.getCurrentWindow(); SimpleForm window = (SimpleForm) player.getCurrentWindow();
Server selectedServer = null; Server selectedServer = null;
for (Server server : player.getServers()) { for (Server server : player.getServers()) {
if (server.toString().equals(window.getContent())) { if (server.toString().equals(window.getContent())) {
@ -437,7 +437,7 @@ public class UIHandler {
* @param data The form response data * @param data The form response data
*/ */
public static void handleServerRemoveResponse(Player player, SimpleFormResponse 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(); String serverName = window.getContent().split(":")[1].trim();
Server selectedServer = null; Server selectedServer = null;
for (Server server : player.getServers()) { for (Server server : player.getServers()) {
@ -474,12 +474,12 @@ public class UIHandler {
} }
try { 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); String address = data.getInput(1);
int port = Integer.parseInt(data.getInputResponses().get(2)); int port = Integer.parseInt(data.getInput(2));
boolean online = data.getToggleResponses().get(3); boolean online = data.getToggle(3);
boolean bedrock = data.getToggleResponses().get(4); boolean bedrock = data.getToggle(4);
// Make sure we got an address // Make sure we got an address
if (address == null || "".equals(address)) { if (address == null || "".equals(address)) {

View file

@ -37,11 +37,11 @@ import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.geysermc.common.window.FormWindow;
import org.geysermc.connect.MasterServer; import org.geysermc.connect.MasterServer;
import org.geysermc.connect.ui.FormID; import org.geysermc.connect.ui.FormID;
import org.geysermc.connect.ui.UIHandler; import org.geysermc.connect.ui.UIHandler;
import org.geysermc.connector.network.session.auth.BedrockClientData; import org.geysermc.connector.network.session.auth.BedrockClientData;
import org.geysermc.cumulus.Form;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -59,7 +59,7 @@ public class Player {
private final List<Server> servers = new ArrayList<>(); private final List<Server> servers = new ArrayList<>();
private final Long2ObjectMap<ModalFormRequestPacket> forms = new Long2ObjectOpenHashMap<>(); private final Long2ObjectMap<ModalFormRequestPacket> forms = new Long2ObjectOpenHashMap<>();
private FormWindow currentWindow; private Form currentWindow;
private FormID currentWindowId; private FormID currentWindowId;
@Setter @Setter
@ -133,7 +133,7 @@ public class Player {
startGamePacket.setCurrentTick(0); startGamePacket.setCurrentTick(0);
startGamePacket.setEnchantmentSeed(0); startGamePacket.setEnchantmentSeed(0);
startGamePacket.setMultiplayerCorrelationId(""); startGamePacket.setMultiplayerCorrelationId("");
startGamePacket.setAuthoritativeMovementMode(AuthoritativeMovementMode.CLIENT); startGamePacket.setServerEngine("");
SyncedPlayerMovementSettings settings = new SyncedPlayerMovementSettings(); SyncedPlayerMovementSettings settings = new SyncedPlayerMovementSettings();
settings.setMovementMode(AuthoritativeMovementMode.CLIENT); settings.setMovementMode(AuthoritativeMovementMode.CLIENT);
@ -180,15 +180,15 @@ public class Player {
* Also cache it against the player for later use * Also cache it against the player for later use
* *
* @param id The {@link FormID} to use for the form * @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.currentWindow = window;
this.currentWindowId = id; this.currentWindowId = id;
ModalFormRequestPacket modalFormRequestPacket = new ModalFormRequestPacket(); ModalFormRequestPacket modalFormRequestPacket = new ModalFormRequestPacket();
modalFormRequestPacket.setFormId(id.ordinal()); modalFormRequestPacket.setFormId(id.ordinal());
modalFormRequestPacket.setFormData(window.getJSONData()); modalFormRequestPacket.setFormData(window.getJsonData());
session.sendPacket(modalFormRequestPacket); session.sendPacket(modalFormRequestPacket);
// This packet is used to fix the image loading bug // This packet is used to fix the image loading bug

View file

@ -29,7 +29,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.geysermc.common.window.button.FormImage; import org.geysermc.cumulus.util.FormImage;
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
@ -80,9 +80,9 @@ public class Server {
@JsonIgnore @JsonIgnore
public FormImage getFormImage() { public FormImage getFormImage() {
if (imageUrl != null && !imageUrl.isEmpty()) { if (imageUrl != null && !imageUrl.isEmpty()) {
return new FormImage(FormImage.FormImageType.URL, imageUrl); return FormImage.of(FormImage.Type.URL, imageUrl);
} else { } 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");
} }
} }
} }