Added player options menu

This commit is contained in:
Marko Milovanovic 2022-07-16 04:54:53 +02:00
parent e11e9aa70a
commit d34cc1ad3a
12 changed files with 190 additions and 36 deletions

View File

@ -5,6 +5,7 @@ import com.samjakob.spigui.SpiGUI;
import lombok.Getter; import lombok.Getter;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import os.arcadiadevs.playerservers.hubcore.commands.CommandManager; import os.arcadiadevs.playerservers.hubcore.commands.CommandManager;
import os.arcadiadevs.playerservers.hubcore.database.DataSource; import os.arcadiadevs.playerservers.hubcore.database.DataSource;
@ -48,7 +49,7 @@ public class PSHubCore extends JavaPlugin {
new PlayerCount(this).register(); new PlayerCount(this).register();
} }
getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); Bukkit.getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
Bukkit.getPluginManager().registerEvents(new ClickEvent(), this); Bukkit.getPluginManager().registerEvents(new ClickEvent(), this);
Bukkit.getPluginManager().registerEvents(new JoinEvent(), this); Bukkit.getPluginManager().registerEvents(new JoinEvent(), this);
Bukkit.getPluginManager().registerEvents(new HubEvents(), this); Bukkit.getPluginManager().registerEvents(new HubEvents(), this);
@ -91,6 +92,6 @@ public class PSHubCore extends JavaPlugin {
@Override @Override
public void onDisable() { public void onDisable() {
super.onDisable(); super.onDisable();
getServer().getMessenger().unregisterIncomingPluginChannel(this, "BungeeCord");
} }
} }

View File

@ -21,8 +21,7 @@ public class CommandManager implements CommandExecutor {
if (PSHubCore.getInstance().getConfig().getBoolean("gui.enabled")) { if (PSHubCore.getInstance().getConfig().getBoolean("gui.enabled")) {
if (command.getName().equalsIgnoreCase("servers") || command.getName().equalsIgnoreCase("menu") || command.getName().equalsIgnoreCase("opengui")) { if (command.getName().equalsIgnoreCase("servers") || command.getName().equalsIgnoreCase("menu") || command.getName().equalsIgnoreCase("opengui")) {
Player player = (Player) commandSender; Player player = (Player) commandSender;
GUIUtils gu = new GUIUtils(); GUIUtils.openSelector(player);
gu.openSelector(player);
} }
} }
} }

View File

@ -11,10 +11,10 @@ public class DataBase {
public boolean containsPort(String port) { public boolean containsPort(String port) {
try (Connection connection = DataSource.getConnection()) { try (Connection connection = DataSource.getConnection()) {
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM PLAYERSERVERS"); PreparedStatement stmt = connection.prepareStatement("SELECT * FROM PlayerServers");
ResultSet rs = stmt.executeQuery(); ResultSet rs = stmt.executeQuery();
while(rs.next()) { while(rs.next()) {
if (rs.getString("PORT").equals(port)) if (rs.getString("Port").equals(port))
return true; return true;
} }
return false; return false;
@ -30,16 +30,15 @@ public class DataBase {
ArrayList<DBInfoStructure> output = new ArrayList<>(); ArrayList<DBInfoStructure> output = new ArrayList<>();
try (Connection connection = DataSource.getConnection()) { try (Connection connection = DataSource.getConnection()) {
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM PLAYERSERVERS"); PreparedStatement stmt = connection.prepareStatement("SELECT * FROM PlayerServers");
ResultSet rs = stmt.executeQuery(); ResultSet rs = stmt.executeQuery();
while(rs.next()) { while(rs.next()) {
output.add(new DBInfoStructure( output.add(new DBInfoStructure(
rs.getString("UUID"), rs.getString("UUID"),
rs.getString("SERVERID").split("-")[0], rs.getString("ServerID").split("-")[0],
rs.getInt("PORT"), rs.getInt("Port"),
rs.getString("NAME"), rs.getString("PlayerName"),
rs.getString("PLAYERNAME"), rs.getString("Node"))
rs.getString("NODE"))
); );
} }
return output; return output;
@ -53,9 +52,9 @@ public class DataBase {
public String getPortByUUID(String UUID) { public String getPortByUUID(String UUID) {
try (Connection connection = DataSource.getConnection()) { try (Connection connection = DataSource.getConnection()) {
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM PLAYERSERVERS WHERE UUID='" + UUID + "'"); PreparedStatement stmt = connection.prepareStatement("SELECT * FROM PlayerServers WHERE UUID='" + UUID + "'");
ResultSet rs = stmt.executeQuery(); rs.next(); ResultSet rs = stmt.executeQuery(); rs.next();
return rs.getString("PORT"); return rs.getString("Port");
} }
catch (Exception e) { catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -65,13 +64,29 @@ public class DataBase {
public String getServerByUUID(String UUID) { public String getServerByUUID(String UUID) {
try (Connection connection = DataSource.getConnection()) { try (Connection connection = DataSource.getConnection()) {
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM PLAYERSERVERS WHERE UUID='" + UUID + "'"); PreparedStatement stmt = connection.prepareStatement("SELECT * FROM PlayerServers WHERE UUID='" + UUID + "'");
ResultSet rs = stmt.executeQuery(); rs.next(); ResultSet rs = stmt.executeQuery(); rs.next();
return rs.getString("SERVERID"); return rs.getString("ServerID");
} }
catch (Exception e) { catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return null; return null;
} }
} }
public boolean containsServer(String serverID) {
try (Connection connection = DataSource.getConnection()) {
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM PlayerServers");
ResultSet rs = stmt.executeQuery();
while(rs.next()) {
if (rs.getString("ServerID").equals(serverID))
return true;
}
return false;
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
} }

View File

@ -7,17 +7,15 @@ public class DBInfoStructure {
private final String UUID; private final String UUID;
private final String serverId; private final String serverId;
private final String serverName;
private final String playerName; private final String playerName;
private final String node; private final String node;
private final int port; private final int port;
public DBInfoStructure(String UUID, String ServerID, int Port, String ServerName, String PlayerName, String node) { public DBInfoStructure(String UUID, String ServerID, int Port, String PlayerName, String node) {
this.UUID = UUID; this.UUID = UUID;
this.serverId = ServerID; this.serverId = ServerID;
this.port = Port; this.port = Port;
this.serverName = ServerName;
this.playerName = PlayerName; this.playerName = PlayerName;
this.node = node; this.node = node;
} }

View File

@ -26,6 +26,10 @@ public class ClickEvent implements Listener {
GUIUtils.openSelector(player); GUIUtils.openSelector(player);
event.setCancelled(true); event.setCancelled(true);
} }
if (player.getInventory().getHeldItemSlot() == PSHubCore.getInstance().getConfig().getInt("gui.item.location1")) {
GUIUtils.openMenu(player);
event.setCancelled(true);
}
} }
@EventHandler @EventHandler
@ -37,8 +41,10 @@ public class ClickEvent implements Listener {
final var player = (Player) event.getWhoClicked(); final var player = (Player) event.getWhoClicked();
final var inventoryType = event.getInventory().getType(); final var inventoryType = event.getInventory().getType();
final var slot = PSHubCore.getInstance().getConfig().getInt("gui.item.location"); final var slot = PSHubCore.getInstance().getConfig().getInt("gui.item.location");
final var slot1 = PSHubCore.getInstance().getConfig().getInt("gui.item.location1");
if (event.getSlot() == slot && (inventoryType == InventoryType.PLAYER || inventoryType == InventoryType.CRAFTING)) { if (event.getSlot() == slot && (inventoryType == InventoryType.PLAYER || inventoryType == InventoryType.CRAFTING)
|| event.getSlot() == slot1 && (inventoryType == InventoryType.PLAYER || inventoryType == InventoryType.CRAFTING)) {
if (player.getGameMode() == GameMode.CREATIVE) { if (player.getGameMode() == GameMode.CREATIVE) {
player.closeInventory(); player.closeInventory();
} }
@ -51,7 +57,8 @@ public class ClickEvent implements Listener {
public void drop(PlayerDropItemEvent event) { public void drop(PlayerDropItemEvent event) {
final var player = event.getPlayer(); final var player = event.getPlayer();
if (player.getInventory().getHeldItemSlot() == PSHubCore.getInstance().getConfig().getInt("gui.item.location")) { if (player.getInventory().getHeldItemSlot() == PSHubCore.getInstance().getConfig().getInt("gui.item.location") ||
player.getInventory().getHeldItemSlot() == PSHubCore.getInstance().getConfig().getInt("gui.item.location1")) {
event.setCancelled(true); event.setCancelled(true);
} }
} }

View File

@ -19,13 +19,15 @@ public class JoinEvent implements Listener {
@EventHandler @EventHandler
public void onJoin(PlayerJoinEvent e) { public void onJoin(PlayerJoinEvent e) {
final var itemName = PSH.getConfig().getString("gui.item.material"); final var itemMaterial = PSH.getConfig().getString("gui.item.material");
final var guiMaterial = XMaterial.matchXMaterial(itemName).orElse(XMaterial.COMPASS).parseMaterial(); final var itemMaterial1 = PSH.getConfig().getString("gui.item.material1");
final var selectorMaterial = XMaterial.matchXMaterial(itemMaterial).orElse(XMaterial.COMPASS).parseMaterial();
final var selectorMaterial1 = XMaterial.matchXMaterial(itemMaterial1).orElse(XMaterial.EMERALD).parseMaterial();
final var player = e.getPlayer(); final var player = e.getPlayer();
if (!PSH.getConfig().getBoolean("gui.enabled") || !PSH.getConfig().getBoolean("gui.item.enabled")) { if (!PSH.getConfig().getBoolean("gui.enabled") || !PSH.getConfig().getBoolean("gui.item.enabled")) {
player.getInventory().forEach(item -> { player.getInventory().forEach(item -> {
if (item.getType() == guiMaterial) { if (item.getType() == selectorMaterial || item.getType() == selectorMaterial1) {
player.getInventory().remove(item); player.getInventory().remove(item);
} }
}); });
@ -33,20 +35,32 @@ public class JoinEvent implements Listener {
} }
new Thread(() -> { new Thread(() -> {
final var itemStack = new ItemStack(guiMaterial); final var itemStack = new ItemStack(selectorMaterial);
final var itemStack1 = new ItemStack(selectorMaterial1);
final var itemMeta = itemStack.getItemMeta(); final var itemMeta = itemStack.getItemMeta();
final var itemMeta1 = itemStack1.getItemMeta();
itemMeta.setDisplayName(ChatUtil.translate(PSH.getConfig().getString("gui.item.name"))); itemMeta.setDisplayName(ChatUtil.translate(PSH.getConfig().getString("gui.item.name")));
itemMeta1.setDisplayName(ChatUtil.translate(PSH.getConfig().getString("gui.item.name1")));
final List<String> lore = PSH.getConfig().getStringList("gui.item.description") final List<String> lore = PSH.getConfig().getStringList("gui.item.description")
.stream() .stream()
.map(ChatUtil::translate) .map(ChatUtil::translate)
.collect(ArrayList::new, ArrayList::add, ArrayList::addAll); .collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
final List<String> lore1 = PSH.getConfig().getStringList("gui.item.description1")
.stream()
.map(ChatUtil::translate)
.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
itemMeta.setLore(lore); itemMeta.setLore(lore);
itemMeta1.setLore(lore1);
itemStack.setItemMeta(itemMeta); itemStack.setItemMeta(itemMeta);
itemStack1.setItemMeta(itemMeta1);
Bukkit.getScheduler().runTask(PSH, () -> player.getInventory().setItem(PSH.getConfig().getInt("gui.item.location"), itemStack)); Bukkit.getScheduler().runTask(PSH, () -> player.getInventory().setItem(PSH.getConfig().getInt("gui.item.location"), itemStack));
Bukkit.getScheduler().runTask(PSH, () -> player.getInventory().setItem(PSH.getConfig().getInt("gui.item.location1"), itemStack1));
}).start(); }).start();
} }
} }

View File

@ -7,6 +7,8 @@ import os.arcadiadevs.playerservers.hubcore.database.DataBase;
import os.arcadiadevs.playerservers.hubcore.utils.PingUtil; import os.arcadiadevs.playerservers.hubcore.utils.PingUtil;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class ServerCache { public class ServerCache {
@ -22,12 +24,17 @@ public class ServerCache {
new Thread(() -> { new Thread(() -> {
while(PSHubCore.getInstance().isEnabled()) { while(PSHubCore.getInstance().isEnabled()) {
final var database = new DataBase(); final var database = new DataBase();
final var map = PSHubCore.getInstance().multinode.getTable("servers").toMap(); Map<String, Object> map = null;
final var rawServers = database.getServersInfo(); final var rawServers = database.getServersInfo();
final var servers = new ArrayList<Server>(); final var servers = new ArrayList<Server>();
if (PSHubCore.getInstance().getConfig().getBoolean("multi-node")) {
map = PSHubCore.getInstance().multinode.getTable("servers").toMap();
}
Map<String, Object> finalMap = map;
rawServers.forEach(server -> { rawServers.forEach(server -> {
var pingUtil = new PingUtil(map.get(server.getNode()).toString().split(" ")[0].replaceAll(":8080", ""), server.getPort()); var pingUtil = new PingUtil(PSHubCore.getInstance().getConfig().getBoolean("multi-node") ? finalMap.get(server.getNode()).toString().split(" ")[0].replaceAll(":8080", "") : "localhost", server.getPort());
var _server = new Server(); var _server = new Server();

View File

@ -16,11 +16,57 @@ public class BungeeUtil {
} }
ByteArrayDataOutput out = ByteStreams.newDataOutput(); ByteArrayDataOutput out = ByteStreams.newDataOutput();
try {
out.writeUTF("Connect"); out.writeUTF("Connect");
out.writeUTF(server); out.writeUTF(server);
} catch (Exception e) {
e.printStackTrace();
}
player.sendPluginMessage(PSHubCore.getInstance(), "BungeeCord", out.toByteArray()); player.sendPluginMessage(PSHubCore.getInstance(), "BungeeCord", out.toByteArray());
event.getWhoClicked().closeInventory(); event.getWhoClicked().closeInventory();
} }
public static void stopServer(InventoryClickEvent event, Player player, String server) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
try {
out.writeUTF("stop");
out.writeUTF(server);
} catch (Exception e) {
e.printStackTrace();
}
player.sendPluginMessage(PSHubCore.getInstance(), "BungeeCord", out.toByteArray());
event.getWhoClicked().closeInventory();
}
public static void deleteServer(InventoryClickEvent event, Player player, String server) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
try {
out.writeUTF("delete");
out.writeUTF(server);
} catch (Exception e) {
e.printStackTrace();
}
player.sendPluginMessage(PSHubCore.getInstance(), "BungeeCord", out.toByteArray());
event.getWhoClicked().closeInventory();
}
public static void createServer(InventoryClickEvent event, Player player, String server) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
try {
out.writeUTF("create");
out.writeUTF(server);
} catch (Exception e) {
e.printStackTrace();
}
player.sendPluginMessage(PSHubCore.getInstance(), "BungeeCord", out.toByteArray());
event.getWhoClicked().closeInventory();
}
} }

View File

@ -6,6 +6,7 @@ import com.samjakob.spigui.item.ItemBuilder;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import os.arcadiadevs.playerservers.hubcore.PSHubCore; import os.arcadiadevs.playerservers.hubcore.PSHubCore;
import os.arcadiadevs.playerservers.hubcore.database.DataBase;
import java.util.ArrayList; import java.util.ArrayList;
@ -14,7 +15,7 @@ public class GUIUtils {
public static void openSelector(Player player) { public static void openSelector(Player player) {
final var PSH = PSHubCore.getInstance(); final var PSH = PSHubCore.getInstance();
final var menu = PSH.spiGUI.create(ChatUtil.translate(PSH.getConfig().getString("gui.menu.name")), 5); final var menu = PSH.spiGUI.create(ChatUtil.translate(PSH.getConfig().getString("gui.menu.name")), 6);
menu.setAutomaticPaginationEnabled(true); menu.setAutomaticPaginationEnabled(true);
menu.setBlockDefaultInteractions(true); menu.setBlockDefaultInteractions(true);
@ -66,4 +67,63 @@ public class GUIUtils {
Bukkit.getScheduler().runTask(PSHubCore.getInstance(), () -> player.openInventory(menu.getInventory())); Bukkit.getScheduler().runTask(PSHubCore.getInstance(), () -> player.openInventory(menu.getInventory()));
}).start(); }).start();
} }
public static void openMenu(Player player) {
final var PSH = PSHubCore.getInstance();
final var menu = PSH.spiGUI.create(ChatUtil.translate(PSH.getConfig().getString("gui.menu.name1")), 3);
final var db = new DataBase();
menu.setAutomaticPaginationEnabled(false);
menu.setBlockDefaultInteractions(true);
new Thread(() -> {
final var servers = PSHubCore.getInstance().getServerCache().getServers();
servers.forEach(server -> {
if (!db.containsServer(server.getUniqueId())) {
var itemCreate = new ItemBuilder(XMaterial.DIAMOND_BLOCK.parseMaterial())
.name(ChatUtil.translate("&aCreate Server"))
.build();
menu.setButton(0, 13, new SGButton(itemCreate).withListener(listener -> BungeeUtil.createServer(listener, player, player.getDisplayName())));
return;
}
if (server.isOnline()) {
var itemJoin = new ItemBuilder(XMaterial.EMERALD_BLOCK.parseMaterial())
.name(ChatUtil.translate("&aJoin Server"))
.build();
var itemDelete = new ItemBuilder(XMaterial.BARRIER.parseMaterial())
.name("&cDelete Server")
.build();
var itemPlayer = new ItemBuilder(XMaterial.OAK_SIGN.parseMaterial())
.name(player.getDisplayName())
.lore()
.build();
menu.setButton(0, 20, new SGButton(itemJoin).withListener(listener -> BungeeUtil.connectPlayer(listener, player, player.getDisplayName())));
menu.setButton(0, 16, new SGButton(itemDelete).withListener(listener -> BungeeUtil.deleteServer(listener, player, player.getDisplayName())));
menu.setButton(0, 4, new SGButton(itemPlayer));
} else {
var itemStop = new ItemBuilder(XMaterial.REDSTONE_BLOCK.parseMaterial())
.name(ChatUtil.translate("&cStop Server"))
.build();
var itemPlayer = new ItemBuilder(XMaterial.OAK_SIGN.parseMaterial())
.name(player.getDisplayName())
.lore()
.build();
menu.setButton(0, 12, new SGButton(itemStop).withListener(listener -> BungeeUtil.stopServer(listener, player, player.getDisplayName())));
menu.setButton(0, 4, new SGButton(itemPlayer));
}
});
Bukkit.getScheduler().runTask(PSHubCore.getInstance(), () -> player.openInventory(menu.getInventory()));
}).start();
}
} }

View File

@ -9,13 +9,20 @@ gui:
item: item:
enabled: true enabled: true
name: "&aQuick Compass" name: "&aQuick Compass"
name1: "&eMy PlayerServers"
material: "COMPASS" material: "COMPASS"
material1: "EMERALD"
location: 0 location: 0
location1: 8
description: description:
- "&7Click here to open the server" - "&7Click here to open the server"
- "&7selector or to create your own one" - "&7selector or to create your own one"
description1:
- "&7Click here to open the server"
- "&7selector or to create your own one"
menu: menu:
name: "&aServer Selector" name: "&aServer Selector"
name1: "&eMy PlayerServers"
cache-time: 20 cache-time: 20
online: online:
block: "EMERALD_BLOCK" block: "EMERALD_BLOCK"