From f60ddc3097e3ac0d9a35abac4bc4cdb0fd973520 Mon Sep 17 00:00:00 2001 From: Cuftica Date: Sun, 11 Dec 2022 23:14:20 +0100 Subject: [PATCH] Added AdminGui --- .gitignore | 1 + PSHubCore.iml | 12 -- dependency-reduced-pom.xml | 44 +++++ pom.xml | 48 ++++++ .../playerservers/hubcore/PsHubCore.java | 6 +- .../hubcore/commands/CommandManager.java | 18 +- .../hubcore/enums/MessageAction.java | 12 ++ .../hubcore/enums/PowerAction.java | 2 +- .../playerservers/hubcore/guis/AdminGui.java | 154 ++++++++++++++++++ .../hubcore/guis/PlayerMenuGui.java | 18 +- .../hubcore/guis/SelectorGui.java | 77 +++++---- .../playerservers/hubcore/models/Server.java | 99 ++++++++--- .../hubcore/utils/BungeeUtil.java | 74 --------- src/main/resources/config.yml | 24 +++ src/main/resources/plugin.yml | 14 +- 15 files changed, 440 insertions(+), 163 deletions(-) delete mode 100644 PSHubCore.iml create mode 100644 src/main/java/os/arcadiadevs/playerservers/hubcore/enums/MessageAction.java create mode 100644 src/main/java/os/arcadiadevs/playerservers/hubcore/guis/AdminGui.java delete mode 100644 src/main/java/os/arcadiadevs/playerservers/hubcore/utils/BungeeUtil.java diff --git a/.gitignore b/.gitignore index 3199f0f..65309bb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea out target +PSHubCore.iml diff --git a/PSHubCore.iml b/PSHubCore.iml deleted file mode 100644 index fa63d4b..0000000 --- a/PSHubCore.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - SPIGOT - - - - - \ No newline at end of file diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index b7e42f7..3441ef7 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -29,6 +29,50 @@ + + + target + + + + maven-shade-plugin + + + package + + shade + + + + + PSHubCore + ${dir} + + + + + + + + + + maven-shade-plugin + + + package + + shade + + + + + PSHubCore + + + + + + jitpack.io diff --git a/pom.xml b/pom.xml index 4f8b787..a6994e7 100644 --- a/pom.xml +++ b/pom.xml @@ -32,6 +32,54 @@ + + + target + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + + + PSHubCore + ${dir} + + + + + + + default + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + + + PSHubCore + + + + + + + jitpack.io diff --git a/src/main/java/os/arcadiadevs/playerservers/hubcore/PsHubCore.java b/src/main/java/os/arcadiadevs/playerservers/hubcore/PsHubCore.java index e6400ee..c08849d 100644 --- a/src/main/java/os/arcadiadevs/playerservers/hubcore/PsHubCore.java +++ b/src/main/java/os/arcadiadevs/playerservers/hubcore/PsHubCore.java @@ -74,6 +74,8 @@ public class PsHubCore extends JavaPlugin { Bukkit.getPluginManager().registerEvents(new HubEvents(getConfig()), this); Objects.requireNonNull(getCommand("servers")).setExecutor(new CommandManager()); + Objects.requireNonNull(getCommand("playermenu")).setExecutor(new CommandManager()); + Objects.requireNonNull(getCommand("adminmenu")).setExecutor(new CommandManager()); // Initialize SpiGUI spiGui = new SpiGUI(this); @@ -90,10 +92,9 @@ public class PsHubCore extends JavaPlugin { * Extracts a file from the jar to the data folder. * * @param name The name of the file. - * @return The file * @throws IOException If the file cannot be extracted. */ - private File extractFile(String name) throws IOException { + private void extractFile(String name) throws IOException { var configFile = new File(this.getDataFolder(), name); //noinspection ResultOfMethodCallIgnored @@ -114,7 +115,6 @@ public class PsHubCore extends JavaPlugin { } } - return configFile; } @Override diff --git a/src/main/java/os/arcadiadevs/playerservers/hubcore/commands/CommandManager.java b/src/main/java/os/arcadiadevs/playerservers/hubcore/commands/CommandManager.java index a9522b4..cd20eb8 100644 --- a/src/main/java/os/arcadiadevs/playerservers/hubcore/commands/CommandManager.java +++ b/src/main/java/os/arcadiadevs/playerservers/hubcore/commands/CommandManager.java @@ -5,10 +5,16 @@ import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import os.arcadiadevs.playerservers.hubcore.PsHubCore; +import os.arcadiadevs.playerservers.hubcore.guis.AdminGui; import os.arcadiadevs.playerservers.hubcore.guis.SelectorGui; import os.arcadiadevs.playerservers.hubcore.utils.ChatUtil; import os.arcadiadevs.playerservers.hubcore.guis.PlayerMenuGui; +/** + * A class that handles all the commands. + * + * @author ArcadiaDevs + */ public class CommandManager implements CommandExecutor { @Override @@ -26,11 +32,21 @@ public class CommandManager implements CommandExecutor { } if (command.getName().equalsIgnoreCase("servers") || - command.getName().equalsIgnoreCase("menu") || command.getName().equalsIgnoreCase("opengui")) { SelectorGui.openGui(player); } + if (command.getName().equalsIgnoreCase("playermenu") || + command.getName().equalsIgnoreCase("pmenu") || + command.getName().equalsIgnoreCase("playergui")) { + PlayerMenuGui.openGui(player); + } + + if (command.getName().equalsIgnoreCase("adminmenu") || + command.getName().equalsIgnoreCase("admingui")) { + AdminGui.openGui(player); + } + return true; } } diff --git a/src/main/java/os/arcadiadevs/playerservers/hubcore/enums/MessageAction.java b/src/main/java/os/arcadiadevs/playerservers/hubcore/enums/MessageAction.java new file mode 100644 index 0000000..6cf5ee0 --- /dev/null +++ b/src/main/java/os/arcadiadevs/playerservers/hubcore/enums/MessageAction.java @@ -0,0 +1,12 @@ +package os.arcadiadevs.playerservers.hubcore.enums; + +public enum MessageAction { + CONNECT, + DELETE, + CREATE, + ADELETE, + ASTOP, + ASTART, + START, + STOP +} diff --git a/src/main/java/os/arcadiadevs/playerservers/hubcore/enums/PowerAction.java b/src/main/java/os/arcadiadevs/playerservers/hubcore/enums/PowerAction.java index 92c88d3..4afff06 100644 --- a/src/main/java/os/arcadiadevs/playerservers/hubcore/enums/PowerAction.java +++ b/src/main/java/os/arcadiadevs/playerservers/hubcore/enums/PowerAction.java @@ -2,5 +2,5 @@ package os.arcadiadevs.playerservers.hubcore.enums; public enum PowerAction { START, - STOP, + STOP } diff --git a/src/main/java/os/arcadiadevs/playerservers/hubcore/guis/AdminGui.java b/src/main/java/os/arcadiadevs/playerservers/hubcore/guis/AdminGui.java new file mode 100644 index 0000000..57d7023 --- /dev/null +++ b/src/main/java/os/arcadiadevs/playerservers/hubcore/guis/AdminGui.java @@ -0,0 +1,154 @@ +package os.arcadiadevs.playerservers.hubcore.guis; + +import com.cryptomorin.xseries.XMaterial; +import com.cryptomorin.xseries.XSound; +import com.samjakob.spigui.buttons.SGButton; +import com.samjakob.spigui.item.ItemBuilder; +import org.bukkit.entity.Player; +import os.arcadiadevs.playerservers.hubcore.PsHubCore; +import os.arcadiadevs.playerservers.hubcore.enums.PowerAction; +import os.arcadiadevs.playerservers.hubcore.enums.ServerStatus; +import os.arcadiadevs.playerservers.hubcore.models.Server; +import os.arcadiadevs.playerservers.hubcore.utils.ChatUtil; +import os.arcadiadevs.playerservers.hubcore.utils.GuiUtils; + +import java.util.ArrayList; + +/** + * Admin gui for admins to manage all servers. + * + * @author ArcadiaDevs + */ +public class AdminGui { + + public static void openGui(Player player) { + + final var instance = PsHubCore.getInstance(); + final var menu = instance.getSpiGui() + .create(ChatUtil.translate(instance.getConfig().getString("gui.admin-menu.menu.name")), 5); + + menu.setAutomaticPaginationEnabled(true); + menu.setBlockDefaultInteractions(true); + + final var onlinexMaterial = + XMaterial.matchXMaterial(instance.getConfig().getString("gui.admin-menu.menu.online.block")) + .orElse(XMaterial.PLAYER_HEAD).parseMaterial(); + final var offlinexMaterial = + XMaterial.matchXMaterial(instance.getConfig().getString("gui.admin-menu.menu.offline.block")) + .orElse(XMaterial.RED_TERRACOTTA).parseMaterial(); + + final var servers = PsHubCore.getInstance() + .getServersController() + .getServers(); + + servers.forEach(server -> { + final var itemBuilder = new ItemBuilder( + server.getStatus() == ServerStatus.ONLINE ? onlinexMaterial : offlinexMaterial); + + final var online = server.getInfo() != null && server.getInfo().motd() != null && server.getStatus() == ServerStatus.ONLINE; + + var lore = instance.getConfig().getStringList(online + ? "gui.player-menu.menu.info.online.lore" + : "gui.player-menu.menu.info.offline.lore" + ); + + lore = lore.stream() + .map(s -> s.replaceAll("%server%", server.getId())) + .map(s -> s.replaceAll("%status%", online ? "&aOnline" : "&cOffline")) + .map(s -> s.replaceAll("%players%", online ? server.getInfo().players() + "" : "0")) + .map(s -> s.replaceAll("%maxplayers%", online ? server.getInfo().maxPlayers() + "" : "0")) + .map(s -> s.replaceAll("%port%", server.getDefaultAllocation().getPort() + "")) + .map(s -> s.replaceAll("%motd%", online ? server.getInfo().motd() : "&cOffline")) + .map(s -> s.replaceAll("%node%", server.getNode().getName())) + .map(s -> s.replaceAll("%owner%", server.getOfflinePlayer().getName())) + .map(s -> s.replaceAll("%ip%", server.getNode().getIp())) + .collect(ArrayList::new, ArrayList::add, ArrayList::addAll); + + var item = itemBuilder + .name(ChatUtil.translate(instance.getConfig().getString( + online ? "gui.admin-menu.menu.online.name" : "gui.admin-menu.menu.offline.name") + .replaceAll("%server%", server.getId()) + .replaceAll("%status%", online ? "&aOnline" : "&cOffline") + .replaceAll("%players%", online ? server.getInfo().players() + "" : "0") + .replaceAll("%maxplayers%", online ? server.getInfo().maxPlayers() + "" : "0") + .replaceAll("%port%", server.getDefaultAllocation().getPort() + "") + .replaceAll("%motd%", online ? server.getInfo().motd() : "&cOffline") + .replaceAll("%node%", server.getNode().getName()) + .replaceAll("%owner%", server.getOfflinePlayer().getName()) + .replaceAll("%ip%", server.getNode().getIp()) + )) + .lore(lore) + .build(); + + menu.setButton(0, menu.getInventory().firstEmpty(), new SGButton(item).withListener( + listener -> openServerMenu(player, server))); + }); + + XSound.BLOCK_NOTE_BLOCK_BASS.play(player); + player.openInventory(menu.getInventory()); + + } + + public static void openServerMenu(Player player, Server server) { + + XSound.BLOCK_NOTE_BLOCK_BASS.play(player); + + final var instance = PsHubCore.getInstance(); + final var rows = 5; + final var menu = instance.getSpiGui() + .create(ChatUtil.translate(server.getOfflinePlayer().getName()), rows); + + menu.setAutomaticPaginationEnabled(false); + menu.setBlockDefaultInteractions(true); + + GuiUtils.addBorder(menu, rows); + + if (server == null) { + ChatUtil.sendMessage(player, "&9Error> &cCould not find your server!"); + return; + } + + final var itemStop = new SGButton(new ItemBuilder(XMaterial.RED_TERRACOTTA.parseItem()) + .name(ChatUtil.translate( + instance.getConfig().getString("gui.player-menu.menu.stop.name"))) + .lore(instance.getConfig().getStringList("gui.player-menu.menu.stop.lore")) + .build()) + .withListener(listener -> { + server.adminStop(player); + player.closeInventory(); + }); + + final var itemStart = new SGButton(new ItemBuilder(XMaterial.GREEN_TERRACOTTA.parseItem()) + .name(ChatUtil.translate( + instance.getConfig().getString("gui.player-menu.menu.start.name"))) + .lore(instance.getConfig().getStringList("gui.player-menu.menu.start.lore")) + .build()) + .withListener(listener -> { + server.adminStart(player); + player.closeInventory(); + }); + + final var itemDelete = new SGButton(new ItemBuilder(XMaterial.BARRIER.parseItem()) + .name(ChatUtil.translate( + instance.getConfig().getString("gui.player-menu.menu.delete.name"))) + .lore(instance.getConfig().getStringList("gui.player-menu.menu.delete.lore")) + .build()) + .withListener(listener -> { + server.adminDelete(player); + player.closeInventory(); + }); + + final var online = server.getInfo() != null && server.getInfo().motd() != null && server.getStatus() == ServerStatus.ONLINE; + + if (online) { + menu.setButton(9 * 2 + 2, itemStop); + } + if (!online) { + menu.setButton(9 * 2 + 2, itemStart); + } + menu.setButton(9*2+6 , itemDelete); + player.openInventory(menu.getInventory()); + + } + +} diff --git a/src/main/java/os/arcadiadevs/playerservers/hubcore/guis/PlayerMenuGui.java b/src/main/java/os/arcadiadevs/playerservers/hubcore/guis/PlayerMenuGui.java index e8e5230..763a11e 100644 --- a/src/main/java/os/arcadiadevs/playerservers/hubcore/guis/PlayerMenuGui.java +++ b/src/main/java/os/arcadiadevs/playerservers/hubcore/guis/PlayerMenuGui.java @@ -7,18 +7,24 @@ import com.samjakob.spigui.item.ItemBuilder; import java.util.ArrayList; import org.bukkit.entity.Player; import os.arcadiadevs.playerservers.hubcore.PsHubCore; +import os.arcadiadevs.playerservers.hubcore.enums.MessageAction; import os.arcadiadevs.playerservers.hubcore.enums.PowerAction; import os.arcadiadevs.playerservers.hubcore.enums.ServerStatus; import os.arcadiadevs.playerservers.hubcore.models.Server; -import os.arcadiadevs.playerservers.hubcore.utils.BungeeUtil; import os.arcadiadevs.playerservers.hubcore.utils.ChatUtil; import os.arcadiadevs.playerservers.hubcore.utils.GuiUtils; +/** + * Player gui to manage their own server. + * + * @author ArcadiaDevs + */ public class PlayerMenuGui { public static void openGui(Player player) { final var instance = PsHubCore.getInstance(); final var serversController = instance.getServersController(); + final var server = serversController.getServer(player); if (!serversController.hasServer(player)) { final var menu = instance.getSpiGui().create( @@ -41,7 +47,7 @@ public class PlayerMenuGui { menu.setButton(0, 13, new SGButton(itemCreate).withListener( listener -> { - BungeeUtil.createServer(player); + server.create(); XSound.ENTITY_EXPERIENCE_ORB_PICKUP.play(player); })); @@ -58,10 +64,8 @@ public class PlayerMenuGui { GuiUtils.addBorder(menu, rows); - final var server = serversController.getServer(player); - if (server == null) { - player.sendMessage(ChatUtil.translate("&9Error> &cCould not find your server!")); + ChatUtil.sendMessage(player, "&9Error> &cCould not find your server!"); return; } @@ -127,7 +131,7 @@ public class PlayerMenuGui { instance.getConfig().getString("gui.player-menu.menu.start.name"))) .lore(instance.getConfig().getStringList("gui.player-menu.menu.start.lore")) .build()) - .withListener(listener -> server.executePowerAction(PowerAction.START)); + .withListener(listener -> server.start()); menu.setButton(20, itemStart); } @@ -200,7 +204,7 @@ public class PlayerMenuGui { .build()) .withListener(listener2 -> { XSound.ENTITY_EXPERIENCE_ORB_PICKUP.play(player); - server.executePowerAction(PowerAction.STOP); + server.stop(); player.closeInventory(); }); diff --git a/src/main/java/os/arcadiadevs/playerservers/hubcore/guis/SelectorGui.java b/src/main/java/os/arcadiadevs/playerservers/hubcore/guis/SelectorGui.java index f39d362..f6af8c8 100644 --- a/src/main/java/os/arcadiadevs/playerservers/hubcore/guis/SelectorGui.java +++ b/src/main/java/os/arcadiadevs/playerservers/hubcore/guis/SelectorGui.java @@ -8,9 +8,13 @@ import java.util.ArrayList; import org.bukkit.entity.Player; import os.arcadiadevs.playerservers.hubcore.PsHubCore; import os.arcadiadevs.playerservers.hubcore.enums.ServerStatus; -import os.arcadiadevs.playerservers.hubcore.utils.BungeeUtil; import os.arcadiadevs.playerservers.hubcore.utils.ChatUtil; +/** + * Server selector gui + * + * @author ArcadiaDevs + */ public class SelectorGui { public static void openGui(Player player) { @@ -23,55 +27,56 @@ public class SelectorGui { menu.setBlockDefaultInteractions(true); final var onlinexMaterial = - XMaterial.matchXMaterial(instance.getConfig().getString("gui.selector.menu.online.block")) - .orElse(XMaterial.PLAYER_HEAD).parseMaterial(); + XMaterial.matchXMaterial(instance.getConfig().getString("gui.selector.menu.online.block")) + .orElse(XMaterial.PLAYER_HEAD).parseMaterial(); final var offlinexMaterial = - XMaterial.matchXMaterial(instance.getConfig().getString("gui.selector.menu.offline.block")) - .orElse(XMaterial.RED_TERRACOTTA).parseMaterial(); + XMaterial.matchXMaterial(instance.getConfig().getString("gui.selector.menu.offline.block")) + .orElse(XMaterial.RED_TERRACOTTA).parseMaterial(); final var servers = PsHubCore.getInstance() - .getServersController() - .getServers(); + .getServersController() + .getServers(); servers.forEach(server -> { final var itemBuilder = new ItemBuilder( - server.getStatus() == ServerStatus.ONLINE ? onlinexMaterial : offlinexMaterial); - final var online = server.getStatus() == ServerStatus.ONLINE; + server.getStatus() == ServerStatus.ONLINE ? onlinexMaterial : offlinexMaterial); + + final var online = server.getInfo() != null && server.getInfo().motd() != null && server.getStatus() == ServerStatus.ONLINE; var lore = instance.getConfig().getStringList( - server.getStatus() == ServerStatus.ONLINE ? "gui.selector.menu.online.lore" : - "gui.selector.menu.offline.lore"); + server.getStatus() == ServerStatus.ONLINE ? "gui.selector.menu.online.lore" : + "gui.selector.menu.offline.lore"); lore = lore.stream() - .map(s -> s.replaceAll("%server%", server.getId())) - .map(s -> s.replaceAll("%status%", online ? "&aOnline" : "&cOffline")) - .map(s -> s.replaceAll("%players%", online ? server.getInfo().players() + "" : "0")) - .map(s -> s.replaceAll("%maxplayers%", online ? server.getInfo().maxPlayers() + "" : "0")) - .map(s -> s.replaceAll("%port%", server.getDefaultAllocation().getPort() + "")) - .map(s -> s.replaceAll("%motd%", online ? server.getInfo().motd() : "&cOffline")) - .map(s -> s.replaceAll("%node%", server.getNode().getName())) - .map(s -> s.replaceAll("%owner%", server.getOfflinePlayer().getName())) - .map(s -> s.replaceAll("%ip%", server.getNode().getIp())) - .collect(ArrayList::new, ArrayList::add, ArrayList::addAll); + .map(s -> s.replaceAll("%server%", server.getId())) + .map(s -> s.replaceAll("%status%", online ? "&aOnline" : "&cOffline")) + .map(s -> s.replaceAll("%players%", online ? server.getInfo().players() + "" : "0")) + .map(s -> s.replaceAll("%maxplayers%", online ? server.getInfo().maxPlayers() + "" : "0")) + .map(s -> s.replaceAll("%port%", server.getDefaultAllocation().getPort() + "")) + .map(s -> s.replaceAll("%motd%", online ? server.getInfo().motd() : "&cOffline")) + .map(s -> s.replaceAll("%node%", server.getNode().getName())) + .map(s -> s.replaceAll("%owner%", server.getOfflinePlayer().getName())) + .map(s -> s.replaceAll("%ip%", server.getNode().getIp())) + .collect(ArrayList::new, ArrayList::add, ArrayList::addAll); var item = itemBuilder - .name(ChatUtil.translate(instance.getConfig().getString( - online ? "gui.selector.menu.online.name" : "gui.selector.menu.offline.name") - .replaceAll("%server%", server.getId()) - .replaceAll("%status%", online ? "&aOnline" : "&cOffline") - .replaceAll("%players%", online ? server.getInfo().players() + "" : "0") - .replaceAll("%maxplayers%", online ? server.getInfo().maxPlayers() + "" : "0") - .replaceAll("%port%", server.getDefaultAllocation().getPort() + "") - .replaceAll("%motd%", online ? server.getInfo().motd() : "&cOffline") - .replaceAll("%node%", server.getNode().getName()) - .replaceAll("%owner%", server.getOfflinePlayer().getName()) - .replaceAll("%ip%", server.getNode().getIp()) - )) - .lore(lore) - .build(); + .name(ChatUtil.translate(instance.getConfig().getString( + online ? "gui.selector.menu.online.name" : "gui.selector.menu.offline.name") + .replaceAll("%server%", server.getId()) + .replaceAll("%status%", online ? "&aOnline" : "&cOffline") + .replaceAll("%players%", online ? server.getInfo().players() + "" : "0") + .replaceAll("%maxplayers%", online ? server.getInfo().maxPlayers() + "" : "0") + .replaceAll("%port%", server.getDefaultAllocation().getPort() + "") + .replaceAll("%motd%", online ? server.getInfo().motd() : "&cOffline") + .replaceAll("%node%", server.getNode().getName()) + .replaceAll("%owner%", server.getOfflinePlayer().getName()) + .replaceAll("%ip%", server.getNode().getIp()) + )) + .lore(lore) + .build(); menu.setButton(0, menu.getInventory().firstEmpty(), new SGButton(item).withListener( - listener -> BungeeUtil.connectPlayer(player))); + listener -> server.connect())); }); XSound.BLOCK_NOTE_BLOCK_BASS.play(player); diff --git a/src/main/java/os/arcadiadevs/playerservers/hubcore/models/Server.java b/src/main/java/os/arcadiadevs/playerservers/hubcore/models/Server.java index 78f92f8..c63a2d2 100644 --- a/src/main/java/os/arcadiadevs/playerservers/hubcore/models/Server.java +++ b/src/main/java/os/arcadiadevs/playerservers/hubcore/models/Server.java @@ -1,29 +1,25 @@ package os.arcadiadevs.playerservers.hubcore.models; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import jakarta.persistence.OneToOne; -import jakarta.persistence.Table; +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import os.arcadiadevs.playerservers.hubcore.PsHubCore; +import os.arcadiadevs.playerservers.hubcore.enums.MessageAction; +import os.arcadiadevs.playerservers.hubcore.enums.PowerAction; +import os.arcadiadevs.playerservers.hubcore.enums.ServerStatus; +import os.arcadiadevs.playerservers.hubcore.utils.ServerPinger; + import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import java.util.List; import java.util.UUID; import java.util.concurrent.ExecutionException; -import lombok.Getter; -import lombok.Setter; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; -import os.arcadiadevs.playerservers.hubcore.enums.PowerAction; -import os.arcadiadevs.playerservers.hubcore.enums.ServerStatus; -import os.arcadiadevs.playerservers.hubcore.utils.BungeeUtil; -import os.arcadiadevs.playerservers.hubcore.utils.ServerPinger; /** * The model of a server. @@ -79,8 +75,11 @@ public class Server { return Bukkit.getPlayer(owner); } + /** + * Connect player to the server. + */ public void connect() { - BungeeUtil.connectPlayer(getPlayer()); + serverAction(MessageAction.CONNECT, getPlayer()); } /** @@ -126,23 +125,69 @@ public class Server { } /** - * Execute a power action on the server. + * Sends bungee message. * - * @param action The action to execute + * @param action message to bungee */ - public void executePowerAction(PowerAction action) { - switch (action) { - case START -> BungeeUtil.startServer(getPlayer()); - case STOP -> BungeeUtil.stopServer(getPlayer()); - default -> throw new IllegalStateException("Unexpected value: " + action); + private void serverAction(MessageAction action, Player player, String id) { + ByteArrayDataOutput out = ByteStreams.newDataOutput(); + + try { + out.writeUTF(action.toString().toLowerCase()); + if (id != null) { + out.writeUTF(id); + } + } catch (Exception e) { + e.printStackTrace(); } + + player.sendPluginMessage(PsHubCore.getInstance(), "BungeeCord", out.toByteArray()); + player.closeInventory(); + } + + private void serverAction(MessageAction action, Player player) { + serverAction(action, player, null); + } + + public void start() { + serverAction(MessageAction.START, getPlayer()); + } + + public void stop() { + serverAction(MessageAction.STOP, getPlayer()); + } + + public void create() { + serverAction(MessageAction.CREATE, getPlayer()); } /** * Deletes the server. */ public void delete() { - BungeeUtil.deleteServer(getPlayer()); + serverAction(MessageAction.DELETE, getPlayer()); } + /** + * Deletes specified server. + */ + public void adminDelete(Player player) { + serverAction(MessageAction.ADELETE, player, getId()); + } + + /** + * Stops specified server. + */ + public void adminStop(Player player) { + serverAction(MessageAction.ASTOP, player, getId()); + } + + /** + * Starts specified server. + */ + public void adminStart(Player player) { + serverAction(MessageAction.ASTART, player, getId()); + } + + } diff --git a/src/main/java/os/arcadiadevs/playerservers/hubcore/utils/BungeeUtil.java b/src/main/java/os/arcadiadevs/playerservers/hubcore/utils/BungeeUtil.java deleted file mode 100644 index 46e3546..0000000 --- a/src/main/java/os/arcadiadevs/playerservers/hubcore/utils/BungeeUtil.java +++ /dev/null @@ -1,74 +0,0 @@ -package os.arcadiadevs.playerservers.hubcore.utils; - -import com.cryptomorin.xseries.XMaterial; -import com.google.common.io.ByteArrayDataOutput; -import com.google.common.io.ByteStreams; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import os.arcadiadevs.playerservers.hubcore.PsHubCore; - -@SuppressWarnings("UnstableApiUsage") -public class BungeeUtil { - - public static void connectPlayer(Player player) { - ByteArrayDataOutput out = ByteStreams.newDataOutput(); - - try { - out.writeUTF("Connect"); - } catch (Exception e) { - e.printStackTrace(); - } - - player.sendPluginMessage(PsHubCore.getInstance(), "BungeeCord", out.toByteArray()); - player.closeInventory(); - } - - public static void stopServer(Player player) { - ByteArrayDataOutput out = ByteStreams.newDataOutput(); - - try { - out.writeUTF("stop"); - } catch (Exception e) { - e.printStackTrace(); - } - player.sendPluginMessage(PsHubCore.getInstance(), "BungeeCord", out.toByteArray()); - player.closeInventory(); - } - - public static void deleteServer(Player player) { - ByteArrayDataOutput out = ByteStreams.newDataOutput(); - - try { - out.writeUTF("delete"); - } catch (Exception e) { - e.printStackTrace(); - } - player.sendPluginMessage(PsHubCore.getInstance(), "BungeeCord", out.toByteArray()); - player.closeInventory(); - } - - public static void createServer(Player player) { - ByteArrayDataOutput out = ByteStreams.newDataOutput(); - - try { - out.writeUTF("create"); - } catch (Exception e) { - e.printStackTrace(); - } - player.sendPluginMessage(PsHubCore.getInstance(), "BungeeCord", out.toByteArray()); - player.closeInventory(); - } - - public static void startServer(Player player) { - ByteArrayDataOutput out = ByteStreams.newDataOutput(); - - try { - out.writeUTF("start"); - } catch (Exception e) { - e.printStackTrace(); - } - player.sendPluginMessage(PsHubCore.getInstance(), "BungeeCord", out.toByteArray()); - player.closeInventory(); - } - -} \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 9cc3830..1a66d1c 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -124,6 +124,30 @@ gui: name: "&aStart the server" lore: - "&7Click here to start the server" + admin-menu: + enabled: true + + menu: + name: "&aServers" + online: + block: "EMERALD_BLOCK" + name: '&a%server%''s server' + lore: + - '&7Status: %status%' + - '&7Players: &2%players%&8/&a%maxplayers%' + - '&7Owner: &a%owner%' + - '&7Motd: &a%motd%' + - '&7Node: &a%node%' + - '&7Ip: &a%ip%&8:&a%port%' + offline: + block: "REDSTONE_BLOCK" + name: '&c%server%''s server' + lore: + - '&7Status: %status%' + - '&7Owner: &c%owner%' + - '&7Node: &c%node%' + - '&7Ip: &c%ip%&8:&c%port%' + # Should we enable multinode support? multi-node: false diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 9809e04..bed1066 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -10,5 +10,15 @@ commands: usage: /servers description: Opens up server selector GUI aliases: - - menu - - opengui \ No newline at end of file + - opengui + playermenu: + usage: /playermenu + description: Opens up player-menu GUI + aliases: + - pmenu + - playergui + adminmenu: + usage: /adminmenu + description: Opens up admin-menu GUI + aliases: + - adminmenu \ No newline at end of file