forked from git-mirrors/GeyserConnect
Add categories for servers (Official, Geyser and Custom)
This commit is contained in:
parent
11bd70bdc9
commit
4dc100a25f
16 changed files with 181 additions and 62 deletions
|
@ -26,10 +26,11 @@
|
||||||
package org.geysermc.connect;
|
package org.geysermc.connect;
|
||||||
|
|
||||||
import com.nukkitx.protocol.bedrock.*;
|
import com.nukkitx.protocol.bedrock.*;
|
||||||
import com.nukkitx.protocol.bedrock.v408.Bedrock_v408;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import org.geysermc.connect.storage.DisabledStorageManager;
|
import org.geysermc.connect.storage.DisabledStorageManager;
|
||||||
|
import org.geysermc.connect.utils.Server;
|
||||||
|
import org.geysermc.connect.utils.ServerCategory;
|
||||||
import org.geysermc.connector.network.BedrockProtocol;
|
import org.geysermc.connector.network.BedrockProtocol;
|
||||||
import org.geysermc.connector.utils.FileUtils;
|
import org.geysermc.connector.utils.FileUtils;
|
||||||
import org.geysermc.connect.proxy.GeyserProxyBootstrap;
|
import org.geysermc.connect.proxy.GeyserProxyBootstrap;
|
||||||
|
@ -40,12 +41,10 @@ import org.geysermc.connect.utils.Player;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Timer;
|
|
||||||
import java.util.TimerTask;
|
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class MasterServer {
|
public class MasterServer {
|
||||||
|
|
||||||
|
@ -191,4 +190,8 @@ public class MasterServer {
|
||||||
geyserProxy = null;
|
geyserProxy = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Server> getServers(ServerCategory serverCategory) {
|
||||||
|
return getGeyserConnectConfig().getServers().stream().filter(server -> server.getCategory() == serverCategory).collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ public class PacketHandler implements BedrockPacketHandler {
|
||||||
|
|
||||||
private Player player;
|
private Player player;
|
||||||
|
|
||||||
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);;
|
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
|
||||||
|
|
||||||
public PacketHandler(BedrockServerSession session, MasterServer masterServer) {
|
public PacketHandler(BedrockServerSession session, MasterServer masterServer) {
|
||||||
this.session = session;
|
this.session = session;
|
||||||
|
@ -213,7 +213,7 @@ public class PacketHandler implements BedrockPacketHandler {
|
||||||
if (!message.trim().isEmpty()) {
|
if (!message.trim().isEmpty()) {
|
||||||
player.sendWindow(FormID.WELCOME, UIHandler.getMessageWindow(message));
|
player.sendWindow(FormID.WELCOME, UIHandler.getMessageWindow(message));
|
||||||
} else {
|
} else {
|
||||||
player.sendWindow(FormID.MAIN, UIHandler.getServerList(player.getServers()));
|
player.sendWindow(FormID.MAIN, UIHandler.getMainMenu());
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -237,10 +237,14 @@ public class PacketHandler implements BedrockPacketHandler {
|
||||||
// Send the response to the correct response function
|
// Send the response to the correct response function
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case WELCOME:
|
case WELCOME:
|
||||||
player.sendWindow(FormID.MAIN, UIHandler.getServerList(player.getServers()));
|
player.sendWindow(FormID.MAIN, UIHandler.getMainMenu());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MAIN:
|
case MAIN:
|
||||||
|
UIHandler.handleMainMenuResponse(player, (SimpleFormResponse) window.getResponse());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LIST_SERVERS:
|
||||||
UIHandler.handleServerListResponse(player, (SimpleFormResponse) window.getResponse());
|
UIHandler.handleServerListResponse(player, (SimpleFormResponse) window.getResponse());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@ public class ProxyConnectorServerEventHandler extends ConnectorServerEventHandle
|
||||||
|
|
||||||
if (shutdownTime != -1) {
|
if (shutdownTime != -1) {
|
||||||
MasterServer.getInstance().getGeneralThreadPool().schedule(() -> {
|
MasterServer.getInstance().getGeneralThreadPool().schedule(() -> {
|
||||||
if (System.currentTimeMillis() - MasterServer.getInstance().getLastDisconnectTime() > shutdownTime * 1000
|
if (System.currentTimeMillis() - MasterServer.getInstance().getLastDisconnectTime() > shutdownTime * 1000L
|
||||||
&& connector != null
|
&& connector != null
|
||||||
&& connector.getPlayers().size() <= 0) {
|
&& connector.getPlayers().size() <= 0) {
|
||||||
MasterServer.getInstance().shutdownGeyserProxy();
|
MasterServer.getInstance().shutdownGeyserProxy();
|
||||||
|
|
|
@ -52,9 +52,9 @@ public class AbstractStorageManager {
|
||||||
MYSQL("mysql", MySQLStorageManager.class);
|
MYSQL("mysql", MySQLStorageManager.class);
|
||||||
|
|
||||||
@JsonValue
|
@JsonValue
|
||||||
private String name;
|
private final String name;
|
||||||
|
|
||||||
private Class<? extends AbstractStorageManager> storageManager;
|
private final Class<? extends AbstractStorageManager> storageManager;
|
||||||
|
|
||||||
StorageType(String name, Class<? extends AbstractStorageManager> storageManager) {
|
StorageType(String name, Class<? extends AbstractStorageManager> storageManager) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class JsonStorageManager extends AbstractStorageManager {
|
||||||
public void saveServers(Player player) {
|
public void saveServers(Player player) {
|
||||||
try {
|
try {
|
||||||
mapper.writeValue(dataFolder.resolve(player.getXuid() + ".json").toFile(), player.getServers());
|
mapper.writeValue(dataFolder.resolve(player.getXuid() + ".json").toFile(), player.getServers());
|
||||||
} catch (IOException e) { }
|
} catch (IOException ignored) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -62,7 +62,7 @@ public class JsonStorageManager extends AbstractStorageManager {
|
||||||
try {
|
try {
|
||||||
List<Server> loadedServers = mapper.readValue(dataFolder.resolve(player.getXuid() + ".json").toFile(), new TypeReference<List<Server>>(){});
|
List<Server> loadedServers = mapper.readValue(dataFolder.resolve(player.getXuid() + ".json").toFile(), new TypeReference<List<Server>>(){});
|
||||||
servers.addAll(loadedServers);
|
servers.addAll(loadedServers);
|
||||||
} catch (IOException e) { }
|
} catch (IOException ignored) { }
|
||||||
|
|
||||||
return servers;
|
return servers;
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ public class MySQLStorageManager extends AbstractStorageManager {
|
||||||
public void closeStorage() {
|
public void closeStorage() {
|
||||||
try {
|
try {
|
||||||
connection.close();
|
connection.close();
|
||||||
} catch (SQLException e) { }
|
} catch (SQLException ignored) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -71,7 +71,7 @@ public class MySQLStorageManager extends AbstractStorageManager {
|
||||||
Statement updatePlayersServers = connection.createStatement();
|
Statement updatePlayersServers = connection.createStatement();
|
||||||
updatePlayersServers.executeUpdate("REPLACE INTO players(xuid, servers) VALUES('" + player.getXuid() + "', '" + mapper.writeValueAsString(player.getServers()) + "');");
|
updatePlayersServers.executeUpdate("REPLACE INTO players(xuid, servers) VALUES('" + player.getXuid() + "', '" + mapper.writeValueAsString(player.getServers()) + "');");
|
||||||
updatePlayersServers.close();
|
updatePlayersServers.close();
|
||||||
} catch (IOException | SQLException e) { }
|
} catch (IOException | SQLException ignored) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -88,7 +88,7 @@ public class MySQLStorageManager extends AbstractStorageManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
getPlayersServers.close();
|
getPlayersServers.close();
|
||||||
} catch (IOException | SQLException e) { }
|
} catch (IOException | SQLException ignored) { }
|
||||||
|
|
||||||
return servers;
|
return servers;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,6 @@ 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 java.io.File;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -61,7 +60,7 @@ public class SQLiteStorageManager extends AbstractStorageManager {
|
||||||
public void closeStorage() {
|
public void closeStorage() {
|
||||||
try {
|
try {
|
||||||
connection.close();
|
connection.close();
|
||||||
} catch (SQLException e) { }
|
} catch (SQLException ignored) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -70,7 +69,7 @@ public class SQLiteStorageManager extends AbstractStorageManager {
|
||||||
Statement updatePlayersServers = connection.createStatement();
|
Statement updatePlayersServers = connection.createStatement();
|
||||||
updatePlayersServers.executeUpdate("INSERT OR REPLACE INTO players(xuid, servers) VALUES('" + player.getXuid() + "', '" + mapper.writeValueAsString(player.getServers()) + "');");
|
updatePlayersServers.executeUpdate("INSERT OR REPLACE INTO players(xuid, servers) VALUES('" + player.getXuid() + "', '" + mapper.writeValueAsString(player.getServers()) + "');");
|
||||||
updatePlayersServers.close();
|
updatePlayersServers.close();
|
||||||
} catch (IOException | SQLException e) { }
|
} catch (IOException | SQLException ignored) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -87,7 +86,7 @@ public class SQLiteStorageManager extends AbstractStorageManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
getPlayersServers.close();
|
getPlayersServers.close();
|
||||||
} catch (IOException | SQLException e) { }
|
} catch (IOException | SQLException ignored) { }
|
||||||
|
|
||||||
return servers;
|
return servers;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ public enum FormID {
|
||||||
WELCOME,
|
WELCOME,
|
||||||
MAIN,
|
MAIN,
|
||||||
DIRECT_CONNECT(true),
|
DIRECT_CONNECT(true),
|
||||||
|
LIST_SERVERS(true),
|
||||||
EDIT_SERVERS(true),
|
EDIT_SERVERS(true),
|
||||||
SERVER_OPTIONS(true),
|
SERVER_OPTIONS(true),
|
||||||
ADD_SERVER(true),
|
ADD_SERVER(true),
|
||||||
|
@ -41,7 +42,7 @@ public enum FormID {
|
||||||
CONNECTING,
|
CONNECTING,
|
||||||
ERROR;
|
ERROR;
|
||||||
|
|
||||||
private boolean handlesNull;
|
private final boolean handlesNull;
|
||||||
|
|
||||||
private static final FormID[] VALUES = values();
|
private static final FormID[] VALUES = values();
|
||||||
|
|
||||||
|
|
|
@ -39,39 +39,53 @@ 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 java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class UIHandler {
|
public class UIHandler {
|
||||||
|
|
||||||
|
public static FormWindow getMainMenu() {
|
||||||
|
SimpleFormWindow window = new SimpleFormWindow("Main Menu", "");
|
||||||
|
|
||||||
|
window.getButtons().add(new FormButton("Official Servers"));
|
||||||
|
window.getButtons().add(new FormButton("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.getButtons().add(new FormButton("Disconnect"));
|
||||||
|
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
*
|
*
|
||||||
* @param servers A list of {@link Server} objects
|
* @param servers A list of {@link Server} objects
|
||||||
|
* @param category The category of the current list
|
||||||
* @return A {@link SimpleFormWindow} object
|
* @return A {@link SimpleFormWindow} object
|
||||||
*/
|
*/
|
||||||
public static FormWindow getServerList(List<Server> servers) {
|
public static FormWindow getServerList(List<Server> servers, ServerCategory category) {
|
||||||
SimpleFormWindow window = new SimpleFormWindow("Servers", "");
|
SimpleFormWindow window = new SimpleFormWindow(category.getTitle() + " Servers", "");
|
||||||
|
|
||||||
// Add a button for each global server
|
// Add a button for each global server
|
||||||
for (Server server : MasterServer.getInstance().getGeyserConnectConfig().getServers()) {
|
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.getButtons().add(new FormButton(server.toString(), server.getFormImage()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a button for each personal server
|
// Add a button for editing
|
||||||
if (MasterServer.getInstance().getGeyserConnectConfig().getCustomServers().isEnabled()) {
|
if (category == ServerCategory.CUSTOM) {
|
||||||
for (Server server : servers) {
|
|
||||||
window.getButtons().add(new FormButton(server.toString(), server.getFormImage()));
|
|
||||||
}
|
|
||||||
|
|
||||||
window.getButtons().add(new FormButton("Edit servers"));
|
window.getButtons().add(new FormButton("Edit servers"));
|
||||||
window.getButtons().add(new FormButton("Direct connect"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
window.getButtons().add(new FormButton("Disconnect"));
|
window.getButtons().add(new FormButton("Back"));
|
||||||
|
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
@ -183,10 +197,44 @@ public class UIHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static FormWindow getMessageWindow(String message) {
|
public static FormWindow getMessageWindow(String message) {
|
||||||
CustomFormWindow window = new CustomFormBuilder("Notice")
|
return new CustomFormBuilder("Notice")
|
||||||
.addComponent(new LabelComponent(message))
|
.addComponent(new LabelComponent(message))
|
||||||
.build();
|
.build();
|
||||||
return window;
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void handleMainMenuResponse(Player player, SimpleFormResponse data) {
|
||||||
|
switch (data.getClickedButtonId()) {
|
||||||
|
case 0:
|
||||||
|
player.setServerCategory(ServerCategory.OFFICIAL);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
player.setServerCategory(ServerCategory.GEYSER);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if (MasterServer.getInstance().getGeyserConnectConfig().getCustomServers().isEnabled()) {
|
||||||
|
switch (data.getClickedButtonId()) {
|
||||||
|
case 2:
|
||||||
|
player.setServerCategory(ServerCategory.CUSTOM);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
player.sendWindow(FormID.DIRECT_CONNECT, getDirectConnect());
|
||||||
|
return;
|
||||||
|
|
||||||
|
default:
|
||||||
|
player.getSession().disconnect("disconnectionScreen.disconnected");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
player.getSession().disconnect("disconnectionScreen.disconnected");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.sendWindow(FormID.LIST_SERVERS, getServerList(player.getCurrentServers(), player.getServerCategory()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -196,23 +244,29 @@ public class UIHandler {
|
||||||
* @param data The form response data
|
* @param data The form response data
|
||||||
*/
|
*/
|
||||||
public static void handleServerListResponse(Player player, SimpleFormResponse data) {
|
public static void handleServerListResponse(Player player, SimpleFormResponse data) {
|
||||||
List<Server> servers = new ArrayList<>(MasterServer.getInstance().getGeyserConnectConfig().getServers());
|
List<Server> servers = player.getCurrentServers();
|
||||||
servers.addAll(player.getServers());
|
|
||||||
|
|
||||||
// Cant be done in a switch as we need to calculate the last 2 buttons
|
if (player.getServerCategory() == ServerCategory.CUSTOM) {
|
||||||
|
if (data == null || data.getClickedButtonId() == servers.size() + 1) {
|
||||||
if ((!MasterServer.getInstance().getGeyserConnectConfig().getCustomServers().isEnabled() && data.getClickedButtonId() == servers.size()) || data.getClickedButtonId() == servers.size() + 2) {
|
player.sendWindow(FormID.MAIN, UIHandler.getMainMenu());
|
||||||
player.getSession().disconnect("disconnectionScreen.disconnected");
|
|
||||||
} else if (data.getClickedButtonId() == servers.size()) {
|
} else if (data.getClickedButtonId() == servers.size()) {
|
||||||
player.sendWindow(FormID.EDIT_SERVERS, getEditServerList(player.getServers()));
|
player.sendWindow(FormID.EDIT_SERVERS, getEditServerList(player.getCurrentServers()));
|
||||||
} else if (data.getClickedButtonId() == servers.size() + 1) {
|
|
||||||
player.sendWindow(FormID.DIRECT_CONNECT, getDirectConnect());
|
|
||||||
} else {
|
} else {
|
||||||
// Get the server
|
// Get the server
|
||||||
Server server = servers.get(data.getClickedButtonId());
|
Server server = servers.get(data.getClickedButtonId());
|
||||||
|
|
||||||
player.sendToServer(server);
|
player.sendToServer(server);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (data == null || data.getClickedButtonId() == servers.size()) {
|
||||||
|
player.sendWindow(FormID.MAIN, UIHandler.getMainMenu());
|
||||||
|
} else {
|
||||||
|
// Get the server
|
||||||
|
Server server = servers.get(data.getClickedButtonId());
|
||||||
|
|
||||||
|
player.sendToServer(server);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -224,7 +278,7 @@ public class UIHandler {
|
||||||
public static void handleDirectConnectResponse(Player player, CustomFormResponse data) {
|
public static void handleDirectConnectResponse(Player player, CustomFormResponse data) {
|
||||||
// Take them back to the main menu if they close the direct connect window
|
// Take them back to the main menu if they close the direct connect window
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
player.sendWindow(FormID.MAIN, getServerList(player.getServers()));
|
player.sendWindow(FormID.MAIN, getMainMenu());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,7 +290,7 @@ public class UIHandler {
|
||||||
|
|
||||||
// Make sure we got an address
|
// Make sure we got an address
|
||||||
if (address == null || "".equals(address)) {
|
if (address == null || "".equals(address)) {
|
||||||
player.sendWindow(FormID.MAIN, getServerList(player.getServers()));
|
player.sendWindow(FormID.MAIN, getMainMenu());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,17 +313,18 @@ public class UIHandler {
|
||||||
* @param data The form response data
|
* @param data The form response data
|
||||||
*/
|
*/
|
||||||
public static void handleEditServerListResponse(Player player, SimpleFormResponse data) {
|
public static void handleEditServerListResponse(Player player, SimpleFormResponse data) {
|
||||||
|
List<Server> servers = player.getCurrentServers();
|
||||||
|
|
||||||
// Take them back to the main menu if they close the edit server list window
|
// Take them back to the main menu if they close the edit server list window
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
player.sendWindow(FormID.MAIN, getServerList(player.getServers()));
|
player.sendWindow(FormID.LIST_SERVERS, getServerList(servers, player.getServerCategory()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Server> servers = player.getServers();
|
|
||||||
if (data.getClickedButtonId() == servers.size()) {
|
if (data.getClickedButtonId() == servers.size()) {
|
||||||
player.sendWindow(FormID.ADD_SERVER, getAddServer());
|
player.sendWindow(FormID.ADD_SERVER, getAddServer());
|
||||||
} else if (data.getClickedButtonId() == servers.size() + 1) {
|
} else if (data.getClickedButtonId() == servers.size() + 1) {
|
||||||
player.sendWindow(FormID.MAIN, getServerList(player.getServers()));
|
player.sendWindow(FormID.LIST_SERVERS, getServerList(servers, player.getServerCategory()));
|
||||||
} else {
|
} else {
|
||||||
Server server = player.getServers().get(data.getClickedButtonId());
|
Server server = player.getServers().get(data.getClickedButtonId());
|
||||||
player.sendWindow(FormID.SERVER_OPTIONS, getServerOptions(server));
|
player.sendWindow(FormID.SERVER_OPTIONS, getServerOptions(server));
|
||||||
|
|
|
@ -35,7 +35,7 @@ import org.geysermc.connector.common.ChatColor;
|
||||||
@Log4j2
|
@Log4j2
|
||||||
public class Logger extends SimpleTerminalConsole implements GeyserLogger {
|
public class Logger extends SimpleTerminalConsole implements GeyserLogger {
|
||||||
|
|
||||||
private boolean colored = true;
|
private final boolean colored = true;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isRunning() {
|
protected boolean isRunning() {
|
||||||
|
|
|
@ -26,11 +26,9 @@
|
||||||
package org.geysermc.connect.utils;
|
package org.geysermc.connect.utils;
|
||||||
|
|
||||||
import com.nukkitx.nbt.*;
|
import com.nukkitx.nbt.*;
|
||||||
import org.geysermc.connector.utils.FileUtils;
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
|
@ -51,11 +51,11 @@ import java.util.UUID;
|
||||||
@Getter
|
@Getter
|
||||||
public class Player {
|
public class Player {
|
||||||
|
|
||||||
private String xuid;
|
private final String xuid;
|
||||||
private UUID identity;
|
private final UUID identity;
|
||||||
private String displayName;
|
private final String displayName;
|
||||||
|
|
||||||
private BedrockServerSession session;
|
private final BedrockServerSession session;
|
||||||
|
|
||||||
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<>();
|
||||||
|
@ -69,6 +69,9 @@ public class Player {
|
||||||
@Setter
|
@Setter
|
||||||
private BedrockClientData clientData;
|
private BedrockClientData clientData;
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
private ServerCategory serverCategory;
|
||||||
|
|
||||||
public Player(JsonNode extraData, BedrockServerSession session) {
|
public Player(JsonNode extraData, BedrockServerSession session) {
|
||||||
this.xuid = extraData.get("XUID").asText();
|
this.xuid = extraData.get("XUID").asText();
|
||||||
this.identity = UUID.fromString(extraData.get("identity").asText());
|
this.identity = UUID.fromString(extraData.get("identity").asText());
|
||||||
|
@ -222,7 +225,7 @@ public class Player {
|
||||||
|
|
||||||
public void sendToServer(Server server) {
|
public void sendToServer(Server server) {
|
||||||
// Tell the user we are connecting them
|
// Tell the user we are connecting them
|
||||||
// this wont show up in alot of cases as the client connects quite quickly
|
// This wont show up in a lot of cases as the client connects quite quickly
|
||||||
sendWindow(FormID.CONNECTING, UIHandler.getWaitingScreen(server));
|
sendWindow(FormID.CONNECTING, UIHandler.getWaitingScreen(server));
|
||||||
|
|
||||||
if (!server.isBedrock()) {
|
if (!server.isBedrock()) {
|
||||||
|
@ -234,4 +237,12 @@ public class Player {
|
||||||
setCurrentServer(server);
|
setCurrentServer(server);
|
||||||
connectToProxy();
|
connectToProxy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Server> getCurrentServers() {
|
||||||
|
if (serverCategory == ServerCategory.CUSTOM) {
|
||||||
|
return servers;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MasterServer.getInstance().getServers(serverCategory);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,7 @@ public class Server {
|
||||||
private boolean bedrock = false;
|
private boolean bedrock = false;
|
||||||
private String name = null;
|
private String name = null;
|
||||||
private String imageUrl = null;
|
private String imageUrl = null;
|
||||||
|
private ServerCategory category = null;
|
||||||
|
|
||||||
public Server(String address) {
|
public Server(String address) {
|
||||||
this(address, -1);
|
this(address, -1);
|
||||||
|
@ -63,6 +64,10 @@ public class Server {
|
||||||
this(address, port, online, bedrock, name, null);
|
this(address, port, online, bedrock, name, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Server(String address, int port, boolean online, boolean bedrock, String name, String imageUrl) {
|
||||||
|
this(address, port, online, bedrock, name, imageUrl, ServerCategory.CUSTOM);
|
||||||
|
}
|
||||||
|
|
||||||
private int defaultPort() { return bedrock ? 19132 : 25565; }
|
private int defaultPort() { return bedrock ? 19132 : 25565; }
|
||||||
|
|
||||||
public int getPort() { return port < 0 ? defaultPort() : port; }
|
public int getPort() { return port < 0 ? defaultPort() : port; }
|
||||||
|
|
41
src/main/java/org/geysermc/connect/utils/ServerCategory.java
Normal file
41
src/main/java/org/geysermc/connect/utils/ServerCategory.java
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019-2021 GeyserMC. http://geysermc.org
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* @author GeyserMC
|
||||||
|
* @link https://github.com/GeyserMC/GeyserConnect
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.geysermc.connect.utils;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public enum ServerCategory {
|
||||||
|
OFFICIAL("Official"),
|
||||||
|
GEYSER("Geyser"),
|
||||||
|
CUSTOM("Custom");
|
||||||
|
|
||||||
|
private final String title;
|
||||||
|
|
||||||
|
ServerCategory(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
}
|
|
@ -42,7 +42,7 @@ public class WebUtils extends org.geysermc.connector.utils.WebUtils {
|
||||||
* @return Body contents or error message if the request fails
|
* @return Body contents or error message if the request fails
|
||||||
*/
|
*/
|
||||||
public static String getBody(String reqURL) {
|
public static String getBody(String reqURL) {
|
||||||
URL url = null;
|
URL url;
|
||||||
try {
|
try {
|
||||||
url = new URL(reqURL);
|
url = new URL(reqURL);
|
||||||
HttpURLConnection con = (HttpURLConnection) url.openConnection();
|
HttpURLConnection con = (HttpURLConnection) url.openConnection();
|
||||||
|
@ -60,7 +60,7 @@ public class WebUtils extends org.geysermc.connector.utils.WebUtils {
|
||||||
*
|
*
|
||||||
* @param con The connection to get the string from
|
* @param con The connection to get the string from
|
||||||
* @return The body of the returned page
|
* @return The body of the returned page
|
||||||
* @throws IOException
|
* @throws IOException If the request fails
|
||||||
*/
|
*/
|
||||||
private static String connectionToString(HttpURLConnection con) throws IOException {
|
private static String connectionToString(HttpURLConnection con) throws IOException {
|
||||||
// Send the request (we dont use this but its required for getErrorStream() to work)
|
// Send the request (we dont use this but its required for getErrorStream() to work)
|
||||||
|
@ -74,7 +74,7 @@ public class WebUtils extends org.geysermc.connector.utils.WebUtils {
|
||||||
|
|
||||||
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
|
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
|
||||||
String inputLine;
|
String inputLine;
|
||||||
StringBuffer content = new StringBuffer();
|
StringBuilder content = new StringBuilder();
|
||||||
|
|
||||||
while ((inputLine = in.readLine()) != null) {
|
while ((inputLine = in.readLine()) != null) {
|
||||||
content.append(inputLine);
|
content.append(inputLine);
|
||||||
|
|
|
@ -49,9 +49,11 @@ servers:
|
||||||
bedrock: true
|
bedrock: true
|
||||||
name: Official Geyser Test Server
|
name: Official Geyser Test Server
|
||||||
imageUrl: https://geysermc.org/android-chrome-192x192.png
|
imageUrl: https://geysermc.org/android-chrome-192x192.png
|
||||||
|
category: OFFICIAL
|
||||||
- address: "play.cubecraft.net"
|
- address: "play.cubecraft.net"
|
||||||
- address: "127.0.0.1"
|
- address: "127.0.0.1"
|
||||||
port: 25565
|
port: 25565
|
||||||
|
category: GEYSER
|
||||||
|
|
||||||
custom-servers:
|
custom-servers:
|
||||||
# Should custom servers be enabled for users
|
# Should custom servers be enabled for users
|
||||||
|
|
Loading…
Add table
Reference in a new issue