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]