Update to 1.17

This commit is contained in:
rtm516 2021-06-09 18:31:56 +01:00
commit 7f6817876c
No known key found for this signature in database
GPG key ID: 331715B8B007C67A
8 changed files with 159 additions and 135 deletions

View file

@ -0,0 +1,11 @@
@ in SOA play.pixelparadise.gg. admin.play.pixelparadise.gg. (
2014030801 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS play.pixelparadise.gg.
IN A 167.71.133.54
IN AAAA 2a03:b0c0:1:e0::6a5:b001

View file

@ -41,3 +41,9 @@ zone "play.galaxite.net" IN {
file "/etc/bind/db.play.galaxite.net"; file "/etc/bind/db.play.galaxite.net";
allow-query { any; }; allow-query { any; };
}; };
zone "play.pixelparadise.gg" IN {
type master;
file "/etc/bind/db.play.pixelparadise.gg";
allow-query { any; };
};

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,24 +38,27 @@ 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;
import org.geysermc.connect.utils.Server; import org.geysermc.connect.utils.Server;
import org.geysermc.connector.entity.attribute.AttributeType; import org.geysermc.connector.entity.attribute.AttributeType;
import org.geysermc.connector.network.BedrockProtocol; import org.geysermc.connector.network.BedrockProtocol;
import org.geysermc.connector.network.session.auth.AuthData;
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;
import java.security.interfaces.ECPublicKey; import java.security.interfaces.ECPublicKey;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class PacketHandler implements BedrockPacketHandler { public class PacketHandler implements BedrockPacketHandler {
@ -153,8 +156,15 @@ public class PacketHandler implements BedrockPacketHandler {
// Fetch the client data // Fetch the client data
JsonNode extraData = payload.get("extraData"); JsonNode extraData = payload.get("extraData");
AuthData authData = new AuthData(
extraData.get("displayName").asText(),
UUID.fromString(extraData.get("identity").asText()),
extraData.get("XUID").asText(),
chainData, packet.getSkinData().toString()
);
// Create a new player and add it to the players list // Create a new player and add it to the players list
player = new Player(extraData, session); player = new Player(authData, session);
masterServer.getPlayers().put(player.getAuthData().getXboxUUID(), player); masterServer.getPlayers().put(player.getAuthData().getXboxUUID(), player);
// Store the full client data // Store the full client data
@ -267,11 +277,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 +291,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 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 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

@ -25,19 +25,16 @@
package org.geysermc.connect.utils; package org.geysermc.connect.utils;
import com.fasterxml.jackson.databind.JsonNode;
import com.nukkitx.math.vector.Vector2f; import com.nukkitx.math.vector.Vector2f;
import com.nukkitx.math.vector.Vector3f; import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.math.vector.Vector3i; import com.nukkitx.math.vector.Vector3i;
import com.nukkitx.protocol.bedrock.BedrockServerSession; import com.nukkitx.protocol.bedrock.BedrockServerSession;
import com.nukkitx.protocol.bedrock.data.*; import com.nukkitx.protocol.bedrock.data.*;
import com.nukkitx.protocol.bedrock.packet.*; import com.nukkitx.protocol.bedrock.packet.*;
import com.nukkitx.protocol.bedrock.v428.Bedrock_v428;
import it.unimi.dsi.fastutil.longs.Long2ObjectMap; 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.proxy.GeyserProxySession; import org.geysermc.connect.proxy.GeyserProxySession;
import org.geysermc.connect.ui.FormID; import org.geysermc.connect.ui.FormID;
@ -50,14 +47,12 @@ import org.geysermc.connector.network.session.auth.BedrockClientData;
import org.geysermc.connector.network.translators.BiomeTranslator; import org.geysermc.connector.network.translators.BiomeTranslator;
import org.geysermc.connector.network.translators.EntityIdentifierRegistry; import org.geysermc.connector.network.translators.EntityIdentifierRegistry;
import org.geysermc.connector.network.translators.item.ItemRegistry; import org.geysermc.connector.network.translators.item.ItemRegistry;
import org.geysermc.connector.network.translators.world.block.BlockTranslator1_16_100; import org.geysermc.connector.network.translators.world.block.BlockTranslator1_17_0;
import org.geysermc.connector.network.translators.world.block.BlockTranslator1_16_210;
import org.geysermc.connector.utils.ChunkUtils;
import org.geysermc.connector.utils.DimensionUtils; import org.geysermc.connector.utils.DimensionUtils;
import org.geysermc.cumulus.Form;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID;
@Getter @Getter
public class Player { public class Player {
@ -69,7 +64,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
@ -81,13 +76,8 @@ public class Player {
@Setter @Setter
private ServerCategory serverCategory; private ServerCategory serverCategory;
public Player(JsonNode extraData, BedrockServerSession session) { public Player(AuthData authData, BedrockServerSession session) {
this.authData = new AuthData( this.authData = authData;
extraData.get("displayName").asText(),
UUID.fromString(extraData.get("identity").asText()),
extraData.get("XUID").asText()
);
this.session = session; this.session = session;
// Should fetch the servers from some form of db // Should fetch the servers from some form of db
@ -145,6 +135,7 @@ public class Player {
startGamePacket.setCurrentTick(0); startGamePacket.setCurrentTick(0);
startGamePacket.setEnchantmentSeed(0); startGamePacket.setEnchantmentSeed(0);
startGamePacket.setMultiplayerCorrelationId(""); startGamePacket.setMultiplayerCorrelationId("");
startGamePacket.setServerEngine("");
SyncedPlayerMovementSettings settings = new SyncedPlayerMovementSettings(); SyncedPlayerMovementSettings settings = new SyncedPlayerMovementSettings();
settings.setMovementMode(AuthoritativeMovementMode.CLIENT); settings.setMovementMode(AuthoritativeMovementMode.CLIENT);
@ -195,15 +186,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
@ -233,8 +224,7 @@ public class Player {
geyserSession.getUpstream().getSession().setPacketCodec(session.getPacketCodec()); geyserSession.getUpstream().getSession().setPacketCodec(session.getPacketCodec());
// Set the block translation based off of version // Set the block translation based off of version
geyserSession.setBlockTranslator(session.getPacketCodec().getProtocolVersion() >= Bedrock_v428.V428_CODEC.getProtocolVersion() geyserSession.setBlockTranslator(BlockTranslator1_17_0.INSTANCE);
? BlockTranslator1_16_210.INSTANCE : BlockTranslator1_16_100.INSTANCE);
geyserSession.setAuthData(authData); geyserSession.setAuthData(authData);
geyserSession.setClientData(clientData); geyserSession.setClientData(clientData);

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");
} }
} }
} }

View file

@ -75,6 +75,13 @@ servers:
category: OFFICIAL category: OFFICIAL
imageUrl: 'https://pbs.twimg.com/profile_images/1332400307050045441/MHQvGEUP_400x400.jpg' imageUrl: 'https://pbs.twimg.com/profile_images/1332400307050045441/MHQvGEUP_400x400.jpg'
- name: Pixel Paradise
address: 40.87.84.59
port: 19132
bedrock: true
category: OFFICIAL
imageUrl: 'https://xforgeassets001.xboxlive.com/pf-title-b63a0803d3653643-20ca2/fa7681c4-673d-40e4-9b6a-61d5d0f93d14/PixelParadise.jpg'
- name: Official Geyser Test Server - name: Official Geyser Test Server
address: test.geysermc.org address: test.geysermc.org
port: 19132 port: 19132