mirror of
https://github.com/arcadiadevs/hubcore.git
synced 2024-11-28 07:15:11 +01:00
Added AdminGui
This commit is contained in:
parent
2f7e8e40be
commit
f60ddc3097
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
.idea
|
.idea
|
||||||
out
|
out
|
||||||
target
|
target
|
||||||
|
PSHubCore.iml
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module version="4">
|
|
||||||
<component name="FacetManager">
|
|
||||||
<facet type="minecraft" name="Minecraft">
|
|
||||||
<configuration>
|
|
||||||
<autoDetectTypes>
|
|
||||||
<platformType>SPIGOT</platformType>
|
|
||||||
</autoDetectTypes>
|
|
||||||
</configuration>
|
|
||||||
</facet>
|
|
||||||
</component>
|
|
||||||
</module>
|
|
@ -29,6 +29,50 @@
|
|||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
<profiles>
|
||||||
|
<profile>
|
||||||
|
<id>target</id>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<finalName>PSHubCore</finalName>
|
||||||
|
<outputDirectory>${dir}</outputDirectory>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
|
<profile>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<finalName>PSHubCore</finalName>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
<repository>
|
||||||
<id>jitpack.io</id>
|
<id>jitpack.io</id>
|
||||||
|
48
pom.xml
48
pom.xml
@ -32,6 +32,54 @@
|
|||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
|
<profiles>
|
||||||
|
<profile>
|
||||||
|
<id>target</id>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<finalName>PSHubCore</finalName>
|
||||||
|
<outputDirectory>${dir}</outputDirectory>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
|
<profile>
|
||||||
|
<id>default</id>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<finalName>PSHubCore</finalName>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
<repository>
|
||||||
<id>jitpack.io</id>
|
<id>jitpack.io</id>
|
||||||
|
@ -74,6 +74,8 @@ public class PsHubCore extends JavaPlugin {
|
|||||||
Bukkit.getPluginManager().registerEvents(new HubEvents(getConfig()), this);
|
Bukkit.getPluginManager().registerEvents(new HubEvents(getConfig()), this);
|
||||||
|
|
||||||
Objects.requireNonNull(getCommand("servers")).setExecutor(new CommandManager());
|
Objects.requireNonNull(getCommand("servers")).setExecutor(new CommandManager());
|
||||||
|
Objects.requireNonNull(getCommand("playermenu")).setExecutor(new CommandManager());
|
||||||
|
Objects.requireNonNull(getCommand("adminmenu")).setExecutor(new CommandManager());
|
||||||
|
|
||||||
// Initialize SpiGUI
|
// Initialize SpiGUI
|
||||||
spiGui = new SpiGUI(this);
|
spiGui = new SpiGUI(this);
|
||||||
@ -90,10 +92,9 @@ public class PsHubCore extends JavaPlugin {
|
|||||||
* Extracts a file from the jar to the data folder.
|
* Extracts a file from the jar to the data folder.
|
||||||
*
|
*
|
||||||
* @param name The name of the file.
|
* @param name The name of the file.
|
||||||
* @return The file
|
|
||||||
* @throws IOException If the file cannot be extracted.
|
* @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);
|
var configFile = new File(this.getDataFolder(), name);
|
||||||
|
|
||||||
//noinspection ResultOfMethodCallIgnored
|
//noinspection ResultOfMethodCallIgnored
|
||||||
@ -114,7 +115,6 @@ public class PsHubCore extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return configFile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -5,10 +5,16 @@ import org.bukkit.command.CommandExecutor;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
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.guis.AdminGui;
|
||||||
import os.arcadiadevs.playerservers.hubcore.guis.SelectorGui;
|
import os.arcadiadevs.playerservers.hubcore.guis.SelectorGui;
|
||||||
import os.arcadiadevs.playerservers.hubcore.utils.ChatUtil;
|
import os.arcadiadevs.playerservers.hubcore.utils.ChatUtil;
|
||||||
import os.arcadiadevs.playerservers.hubcore.guis.PlayerMenuGui;
|
import os.arcadiadevs.playerservers.hubcore.guis.PlayerMenuGui;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class that handles all the commands.
|
||||||
|
*
|
||||||
|
* @author ArcadiaDevs
|
||||||
|
*/
|
||||||
public class CommandManager implements CommandExecutor {
|
public class CommandManager implements CommandExecutor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -26,11 +32,21 @@ public class CommandManager implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (command.getName().equalsIgnoreCase("servers") ||
|
if (command.getName().equalsIgnoreCase("servers") ||
|
||||||
command.getName().equalsIgnoreCase("menu") ||
|
|
||||||
command.getName().equalsIgnoreCase("opengui")) {
|
command.getName().equalsIgnoreCase("opengui")) {
|
||||||
SelectorGui.openGui(player);
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,12 @@
|
|||||||
|
package os.arcadiadevs.playerservers.hubcore.enums;
|
||||||
|
|
||||||
|
public enum MessageAction {
|
||||||
|
CONNECT,
|
||||||
|
DELETE,
|
||||||
|
CREATE,
|
||||||
|
ADELETE,
|
||||||
|
ASTOP,
|
||||||
|
ASTART,
|
||||||
|
START,
|
||||||
|
STOP
|
||||||
|
}
|
@ -2,5 +2,5 @@ package os.arcadiadevs.playerservers.hubcore.enums;
|
|||||||
|
|
||||||
public enum PowerAction {
|
public enum PowerAction {
|
||||||
START,
|
START,
|
||||||
STOP,
|
STOP
|
||||||
}
|
}
|
||||||
|
@ -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());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -7,18 +7,24 @@ import com.samjakob.spigui.item.ItemBuilder;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
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.enums.MessageAction;
|
||||||
import os.arcadiadevs.playerservers.hubcore.enums.PowerAction;
|
import os.arcadiadevs.playerservers.hubcore.enums.PowerAction;
|
||||||
import os.arcadiadevs.playerservers.hubcore.enums.ServerStatus;
|
import os.arcadiadevs.playerservers.hubcore.enums.ServerStatus;
|
||||||
import os.arcadiadevs.playerservers.hubcore.models.Server;
|
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.ChatUtil;
|
||||||
import os.arcadiadevs.playerservers.hubcore.utils.GuiUtils;
|
import os.arcadiadevs.playerservers.hubcore.utils.GuiUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Player gui to manage their own server.
|
||||||
|
*
|
||||||
|
* @author ArcadiaDevs
|
||||||
|
*/
|
||||||
public class PlayerMenuGui {
|
public class PlayerMenuGui {
|
||||||
|
|
||||||
public static void openGui(Player player) {
|
public static void openGui(Player player) {
|
||||||
final var instance = PsHubCore.getInstance();
|
final var instance = PsHubCore.getInstance();
|
||||||
final var serversController = instance.getServersController();
|
final var serversController = instance.getServersController();
|
||||||
|
final var server = serversController.getServer(player);
|
||||||
|
|
||||||
if (!serversController.hasServer(player)) {
|
if (!serversController.hasServer(player)) {
|
||||||
final var menu = instance.getSpiGui().create(
|
final var menu = instance.getSpiGui().create(
|
||||||
@ -41,7 +47,7 @@ public class PlayerMenuGui {
|
|||||||
|
|
||||||
menu.setButton(0, 13, new SGButton(itemCreate).withListener(
|
menu.setButton(0, 13, new SGButton(itemCreate).withListener(
|
||||||
listener -> {
|
listener -> {
|
||||||
BungeeUtil.createServer(player);
|
server.create();
|
||||||
XSound.ENTITY_EXPERIENCE_ORB_PICKUP.play(player);
|
XSound.ENTITY_EXPERIENCE_ORB_PICKUP.play(player);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
@ -58,10 +64,8 @@ public class PlayerMenuGui {
|
|||||||
|
|
||||||
GuiUtils.addBorder(menu, rows);
|
GuiUtils.addBorder(menu, rows);
|
||||||
|
|
||||||
final var server = serversController.getServer(player);
|
|
||||||
|
|
||||||
if (server == null) {
|
if (server == null) {
|
||||||
player.sendMessage(ChatUtil.translate("&9Error> &cCould not find your server!"));
|
ChatUtil.sendMessage(player, "&9Error> &cCould not find your server!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,7 +131,7 @@ public class PlayerMenuGui {
|
|||||||
instance.getConfig().getString("gui.player-menu.menu.start.name")))
|
instance.getConfig().getString("gui.player-menu.menu.start.name")))
|
||||||
.lore(instance.getConfig().getStringList("gui.player-menu.menu.start.lore"))
|
.lore(instance.getConfig().getStringList("gui.player-menu.menu.start.lore"))
|
||||||
.build())
|
.build())
|
||||||
.withListener(listener -> server.executePowerAction(PowerAction.START));
|
.withListener(listener -> server.start());
|
||||||
|
|
||||||
menu.setButton(20, itemStart);
|
menu.setButton(20, itemStart);
|
||||||
}
|
}
|
||||||
@ -200,7 +204,7 @@ public class PlayerMenuGui {
|
|||||||
.build())
|
.build())
|
||||||
.withListener(listener2 -> {
|
.withListener(listener2 -> {
|
||||||
XSound.ENTITY_EXPERIENCE_ORB_PICKUP.play(player);
|
XSound.ENTITY_EXPERIENCE_ORB_PICKUP.play(player);
|
||||||
server.executePowerAction(PowerAction.STOP);
|
server.stop();
|
||||||
player.closeInventory();
|
player.closeInventory();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -8,9 +8,13 @@ import java.util.ArrayList;
|
|||||||
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.enums.ServerStatus;
|
import os.arcadiadevs.playerservers.hubcore.enums.ServerStatus;
|
||||||
import os.arcadiadevs.playerservers.hubcore.utils.BungeeUtil;
|
|
||||||
import os.arcadiadevs.playerservers.hubcore.utils.ChatUtil;
|
import os.arcadiadevs.playerservers.hubcore.utils.ChatUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Server selector gui
|
||||||
|
*
|
||||||
|
* @author ArcadiaDevs
|
||||||
|
*/
|
||||||
public class SelectorGui {
|
public class SelectorGui {
|
||||||
|
|
||||||
public static void openGui(Player player) {
|
public static void openGui(Player player) {
|
||||||
@ -36,7 +40,8 @@ public class SelectorGui {
|
|||||||
servers.forEach(server -> {
|
servers.forEach(server -> {
|
||||||
final var itemBuilder = new ItemBuilder(
|
final var itemBuilder = new ItemBuilder(
|
||||||
server.getStatus() == ServerStatus.ONLINE ? onlinexMaterial : offlinexMaterial);
|
server.getStatus() == ServerStatus.ONLINE ? onlinexMaterial : offlinexMaterial);
|
||||||
final var online = server.getStatus() == ServerStatus.ONLINE;
|
|
||||||
|
final var online = server.getInfo() != null && server.getInfo().motd() != null && server.getStatus() == ServerStatus.ONLINE;
|
||||||
|
|
||||||
var lore = instance.getConfig().getStringList(
|
var lore = instance.getConfig().getStringList(
|
||||||
server.getStatus() == ServerStatus.ONLINE ? "gui.selector.menu.online.lore" :
|
server.getStatus() == ServerStatus.ONLINE ? "gui.selector.menu.online.lore" :
|
||||||
@ -71,7 +76,7 @@ public class SelectorGui {
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
menu.setButton(0, menu.getInventory().firstEmpty(), new SGButton(item).withListener(
|
menu.setButton(0, menu.getInventory().firstEmpty(), new SGButton(item).withListener(
|
||||||
listener -> BungeeUtil.connectPlayer(player)));
|
listener -> server.connect()));
|
||||||
});
|
});
|
||||||
|
|
||||||
XSound.BLOCK_NOTE_BLOCK_BASS.play(player);
|
XSound.BLOCK_NOTE_BLOCK_BASS.play(player);
|
||||||
|
@ -1,29 +1,25 @@
|
|||||||
package os.arcadiadevs.playerservers.hubcore.models;
|
package os.arcadiadevs.playerservers.hubcore.models;
|
||||||
|
|
||||||
import jakarta.persistence.Column;
|
import com.google.common.io.ByteArrayDataOutput;
|
||||||
import jakarta.persistence.Entity;
|
import com.google.common.io.ByteStreams;
|
||||||
import jakarta.persistence.FetchType;
|
import jakarta.persistence.*;
|
||||||
import jakarta.persistence.Id;
|
import lombok.Getter;
|
||||||
import jakarta.persistence.JoinColumn;
|
import lombok.Setter;
|
||||||
import jakarta.persistence.ManyToOne;
|
import org.bukkit.Bukkit;
|
||||||
import jakarta.persistence.OneToMany;
|
import org.bukkit.OfflinePlayer;
|
||||||
import jakarta.persistence.OneToOne;
|
import org.bukkit.entity.Player;
|
||||||
import jakarta.persistence.Table;
|
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.io.IOException;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ExecutionException;
|
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.
|
* The model of a server.
|
||||||
@ -79,8 +75,11 @@ public class Server {
|
|||||||
return Bukkit.getPlayer(owner);
|
return Bukkit.getPlayer(owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connect player to the server.
|
||||||
|
*/
|
||||||
public void connect() {
|
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) {
|
private void serverAction(MessageAction action, Player player, String id) {
|
||||||
switch (action) {
|
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
||||||
case START -> BungeeUtil.startServer(getPlayer());
|
|
||||||
case STOP -> BungeeUtil.stopServer(getPlayer());
|
try {
|
||||||
default -> throw new IllegalStateException("Unexpected value: " + action);
|
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.
|
* Deletes the server.
|
||||||
*/
|
*/
|
||||||
public void delete() {
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -124,6 +124,30 @@ gui:
|
|||||||
name: "&aStart the server"
|
name: "&aStart the server"
|
||||||
lore:
|
lore:
|
||||||
- "&7Click here to start the server"
|
- "&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?
|
# Should we enable multinode support?
|
||||||
multi-node: false
|
multi-node: false
|
||||||
|
@ -10,5 +10,15 @@ commands:
|
|||||||
usage: /servers
|
usage: /servers
|
||||||
description: Opens up server selector GUI
|
description: Opens up server selector GUI
|
||||||
aliases:
|
aliases:
|
||||||
- menu
|
|
||||||
- opengui
|
- opengui
|
||||||
|
playermenu:
|
||||||
|
usage: /playermenu
|
||||||
|
description: Opens up player-menu GUI
|
||||||
|
aliases:
|
||||||
|
- pmenu
|
||||||
|
- playergui
|
||||||
|
adminmenu:
|
||||||
|
usage: /adminmenu
|
||||||
|
description: Opens up admin-menu GUI
|
||||||
|
aliases:
|
||||||
|
- adminmenu
|
Loading…
Reference in New Issue
Block a user