diff --git a/.idea/artifacts/PlayerServersHubCore_jar.xml b/.idea/artifacts/PlayerServersHubCore_jar.xml index 2cca8c7..61b3744 100644 --- a/.idea/artifacts/PlayerServersHubCore_jar.xml +++ b/.idea/artifacts/PlayerServersHubCore_jar.xml @@ -8,6 +8,7 @@ + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_code_gson_gson_2_8_1.xml b/.idea/libraries/Maven__com_google_code_gson_gson_2_8_1.xml new file mode 100644 index 0000000..ef489bc --- /dev/null +++ b/.idea/libraries/Maven__com_google_code_gson_gson_2_8_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_moandjiezana_toml_toml4j_0_7_2.xml b/.idea/libraries/Maven__com_moandjiezana_toml_toml4j_0_7_2.xml new file mode 100644 index 0000000..3f15348 --- /dev/null +++ b/.idea/libraries/Maven__com_moandjiezana_toml_toml4j_0_7_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/PlayerServersHubCore.iml b/PlayerServersHubCore.iml index 2462c2d..458edea 100644 --- a/PlayerServersHubCore.iml +++ b/PlayerServersHubCore.iml @@ -17,6 +17,8 @@ + + diff --git a/pom.xml b/pom.xml index b2f6ad8..3de0e77 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,11 @@ slf4j-simple 1.6.4 + + com.moandjiezana.toml + toml4j + 0.7.2 + com.github.cryptomorin XSeries diff --git a/src/main/java/os/arcadiadevs/playerservers/hubcore/PSHubCore.java b/src/main/java/os/arcadiadevs/playerservers/hubcore/PSHubCore.java index 4320223..6a17d3e 100644 --- a/src/main/java/os/arcadiadevs/playerservers/hubcore/PSHubCore.java +++ b/src/main/java/os/arcadiadevs/playerservers/hubcore/PSHubCore.java @@ -1,5 +1,6 @@ package os.arcadiadevs.playerservers.hubcore; +import com.moandjiezana.toml.Toml; import lombok.SneakyThrows; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; @@ -11,11 +12,16 @@ import os.arcadiadevs.playerservers.hubcore.events.HubEvents; import os.arcadiadevs.playerservers.hubcore.events.JoinEvent; import os.arcadiadevs.playerservers.hubcore.placeholders.PlayerCount; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; import java.util.Objects; public class PSHubCore extends JavaPlugin { public static Plugin PSH; + public static Toml multinode; @SneakyThrows @Override @@ -23,6 +29,7 @@ public class PSHubCore extends JavaPlugin { PSH = this; getConfig().options().copyDefaults(true); saveConfig(); + createMultiNodeConfig(); DataSource ds = new DataSource(); ds.registerDataSource(); @@ -43,6 +50,31 @@ public class PSHubCore extends JavaPlugin { Objects.requireNonNull(getCommand("servers")).setExecutor(new CommandManager()); } + private void createMultiNodeConfig() throws IOException { + + if (!getConfig().getBoolean("multi-node")) { + return; + } + + File configFile = new File(this.getDataFolder(), "multinode.toml"); + //noinspection ResultOfMethodCallIgnored + getDataFolder().mkdirs(); + if (configFile.createNewFile()) { + + try (InputStream fis = getClass().getResourceAsStream("/multinode.toml"); FileOutputStream fos = new FileOutputStream(configFile)) { + byte[] buf = new byte[1024]; + int i; + while ((i = fis.read(buf)) != -1) { + fos.write(buf, 0, i); + } + } catch (Exception e) { + getLogger().info("[PlayerServers] Failed to load MultiNode file from Jar"); + } + } + + multinode = new Toml().read(new File(this.getDataFolder(), "multinode.toml")); + } + @Override public void onDisable() { super.onDisable(); diff --git a/src/main/java/os/arcadiadevs/playerservers/hubcore/database/DataBase.java b/src/main/java/os/arcadiadevs/playerservers/hubcore/database/DataBase.java index c3b639b..057a5ab 100644 --- a/src/main/java/os/arcadiadevs/playerservers/hubcore/database/DataBase.java +++ b/src/main/java/os/arcadiadevs/playerservers/hubcore/database/DataBase.java @@ -38,7 +38,8 @@ public class DataBase { rs.getString("SERVERID"), rs.getString("PORT"), rs.getString("NAME"), - rs.getString("PLAYERNAME")) + rs.getString("PLAYERNAME"), + rs.getString("NODE")) ); } return output; diff --git a/src/main/java/os/arcadiadevs/playerservers/hubcore/database/structures/DBInfoStructure.java b/src/main/java/os/arcadiadevs/playerservers/hubcore/database/structures/DBInfoStructure.java index dcf1698..9c50340 100644 --- a/src/main/java/os/arcadiadevs/playerservers/hubcore/database/structures/DBInfoStructure.java +++ b/src/main/java/os/arcadiadevs/playerservers/hubcore/database/structures/DBInfoStructure.java @@ -2,18 +2,20 @@ package os.arcadiadevs.playerservers.hubcore.database.structures; public class DBInfoStructure { - private String UUID; - private String ServerID; - private String Port; - private String ServerName; - private String PlayerName; + private final String UUID; + private final String ServerID; + private final String Port; + private final String ServerName; + private final String PlayerName; + private final String Node; - public DBInfoStructure(String UUID, String ServerID, String Port, String ServerName, String PlayerName) { + public DBInfoStructure(String UUID, String ServerID, String Port, String ServerName, String PlayerName, String node) { this.UUID = UUID; this.ServerID = ServerID; this.Port = Port; this.ServerName = ServerName; this.PlayerName = PlayerName; + this.Node = node; } public String getPlayerName() { @@ -36,4 +38,8 @@ public class DBInfoStructure { return UUID; } + public String getNode() { + return Node; + } + } diff --git a/src/main/java/os/arcadiadevs/playerservers/hubcore/utils/GUIUtils.java b/src/main/java/os/arcadiadevs/playerservers/hubcore/utils/GUIUtils.java index e1a3b85..b9ec7a6 100644 --- a/src/main/java/os/arcadiadevs/playerservers/hubcore/utils/GUIUtils.java +++ b/src/main/java/os/arcadiadevs/playerservers/hubcore/utils/GUIUtils.java @@ -7,11 +7,13 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import os.arcadiadevs.playerservers.hubcore.PSHubCore; import os.arcadiadevs.playerservers.hubcore.database.DataBase; import os.arcadiadevs.playerservers.hubcore.database.structures.DBInfoStructure; import os.arcadiadevs.playerservers.hubcore.database.structures.PingInfoStructure; import java.util.ArrayList; +import java.util.Map; import static os.arcadiadevs.playerservers.hubcore.PSHubCore.PSH; import static os.arcadiadevs.playerservers.hubcore.utils.ColorUtils.translate; @@ -19,23 +21,25 @@ import static os.arcadiadevs.playerservers.hubcore.utils.ColorUtils.translate; public class GUIUtils { public void openSelector(Player player) { - DataBase db = new DataBase(); - PingUtil pu = new PingUtil(); + final DataBase db = new DataBase(); + final PingUtil pu = new PingUtil(); - Inventory gui = Bukkit.createInventory(player, 9*6, ChatColor.GREEN + "Server Selector"); + final Inventory gui = Bukkit.createInventory(player, 9*6, ChatColor.GREEN + "Server Selector"); + final Map map = PSHubCore.multinode.getTable("servers").toMap(); Bukkit.getScheduler().runTaskAsynchronously(PSH, () -> { for (DBInfoStructure is : db.getServersInfo()) { - ItemStack istack; - if (pu.isOnline("127.0.0.1", is.getPort())) { + final ItemStack istack; + if (pu.isOnline(PSH.getConfig().getBoolean("multi-node") ? map.get(is.getNode()).toString() : "127.0.0.1", is.getPort())) { - PingInfoStructure pus = pu.getData(Integer.parseInt(is.getPort())); + final PingInfoStructure pus = pu.getData(Integer.parseInt(is.getPort())); + final ArrayList lore = new ArrayList<>(); istack = new ItemStack(XMaterial.EMERALD_BLOCK.parseMaterial()); - ItemMeta ir = istack.getItemMeta(); + final ItemMeta ir = istack.getItemMeta(); + //noinspection ConstantConditions ir.setDisplayName(translate("&a" + is.getPlayerName() + "'s server")); - ArrayList lore = new ArrayList<>(); lore.add(translate("&cPort: &7" + is.getPort())); lore.add(translate("&cUUID: &7" + is.getServerID().split("-")[0])); lore.add(translate(String.format("&cOnline: &7%d/%d", pus.getOnline(), pus.getMax()))); @@ -48,12 +52,12 @@ public class GUIUtils { } for (DBInfoStructure is : db.getServersInfo()) { - if (!pu.isOnline("127.0.0.1", is.getPort())) { - ItemStack istack = new ItemStack(XMaterial.REDSTONE_BLOCK.parseMaterial()); - ItemMeta ir = istack.getItemMeta(); + if (!pu.isOnline(PSH.getConfig().getBoolean("multi-node") ? map.get(is.getNode()).toString() : "127.0.0.1", is.getPort())) { + final ItemStack istack = new ItemStack(XMaterial.REDSTONE_BLOCK.parseMaterial()); + final ItemMeta ir = istack.getItemMeta(); + final ArrayList lore = new ArrayList<>(); //noinspection ConstantConditions ir.setDisplayName(translate("&a" + is.getPlayerName() + "'s server")); - ArrayList lore = new ArrayList<>(); lore.add(translate("&cPort: &7" + is.getPort())); lore.add(translate("&cUUID: &7" + is.getServerID().split("-")[0])); ir.setLore(lore); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 1f16e6c..23229c7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -13,4 +13,7 @@ compass-description: - "&7selector or to create your own one" disable-weather: true -disable-damage: true \ No newline at end of file +disable-damage: true + +# EXPERIMENTAL +multi-node: false \ No newline at end of file diff --git a/src/main/resources/multinode.toml b/src/main/resources/multinode.toml new file mode 100644 index 0000000..e39c711 --- /dev/null +++ b/src/main/resources/multinode.toml @@ -0,0 +1,3 @@ +# Please copy the content of multinode.toml from PSBungee here. +[servers] +example = "node1.example.com:25565" \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 3af3c7b..8713c5f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: PSHubCore main: os.arcadiadevs.playerservers.hubcore.PSHubCore -version: 1.4.3 +version: 1.4.4 author: OpenSource softdepend: [PlaceholderAPI] diff --git a/target/classes/config.yml b/target/classes/config.yml index 1f16e6c..23229c7 100644 --- a/target/classes/config.yml +++ b/target/classes/config.yml @@ -13,4 +13,7 @@ compass-description: - "&7selector or to create your own one" disable-weather: true -disable-damage: true \ No newline at end of file +disable-damage: true + +# EXPERIMENTAL +multi-node: false \ No newline at end of file diff --git a/target/classes/multinode.toml b/target/classes/multinode.toml new file mode 100644 index 0000000..e39c711 --- /dev/null +++ b/target/classes/multinode.toml @@ -0,0 +1,3 @@ +# Please copy the content of multinode.toml from PSBungee here. +[servers] +example = "node1.example.com:25565" \ No newline at end of file diff --git a/target/classes/os/arcadiadevs/playerservers/hubcore/PSHubCore.class b/target/classes/os/arcadiadevs/playerservers/hubcore/PSHubCore.class index 28a2558..f9171e6 100644 Binary files a/target/classes/os/arcadiadevs/playerservers/hubcore/PSHubCore.class and b/target/classes/os/arcadiadevs/playerservers/hubcore/PSHubCore.class differ diff --git a/target/classes/os/arcadiadevs/playerservers/hubcore/database/DataBase.class b/target/classes/os/arcadiadevs/playerservers/hubcore/database/DataBase.class index ad0fa39..8656b08 100644 Binary files a/target/classes/os/arcadiadevs/playerservers/hubcore/database/DataBase.class and b/target/classes/os/arcadiadevs/playerservers/hubcore/database/DataBase.class differ diff --git a/target/classes/os/arcadiadevs/playerservers/hubcore/database/structures/DBInfoStructure.class b/target/classes/os/arcadiadevs/playerservers/hubcore/database/structures/DBInfoStructure.class index b083719..998a910 100644 Binary files a/target/classes/os/arcadiadevs/playerservers/hubcore/database/structures/DBInfoStructure.class and b/target/classes/os/arcadiadevs/playerservers/hubcore/database/structures/DBInfoStructure.class differ diff --git a/target/classes/os/arcadiadevs/playerservers/hubcore/utils/GUIUtils.class b/target/classes/os/arcadiadevs/playerservers/hubcore/utils/GUIUtils.class index 5d114c0..75ab00f 100644 Binary files a/target/classes/os/arcadiadevs/playerservers/hubcore/utils/GUIUtils.class and b/target/classes/os/arcadiadevs/playerservers/hubcore/utils/GUIUtils.class differ diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml index 3af3c7b..8713c5f 100644 --- a/target/classes/plugin.yml +++ b/target/classes/plugin.yml @@ -1,6 +1,6 @@ name: PSHubCore main: os.arcadiadevs.playerservers.hubcore.PSHubCore -version: 1.4.3 +version: 1.4.4 author: OpenSource softdepend: [PlaceholderAPI]