diff --git a/pom.xml b/pom.xml index 8f8f9ef..4ff1bfc 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ net.t2code T2CodeLib - 13.9 + 14.0 jar T2CodeLib diff --git a/src/main/java/net/t2code/t2codelib/BUNGEE/api/bungeePlayers/T2CBbungeePlayers.java b/src/main/java/net/t2code/t2codelib/BUNGEE/api/bungeePlayers/T2CBbungeePlayers.java new file mode 100644 index 0000000..5a847ed --- /dev/null +++ b/src/main/java/net/t2code/t2codelib/BUNGEE/api/bungeePlayers/T2CBbungeePlayers.java @@ -0,0 +1,99 @@ +package net.t2code.t2codelib.BUNGEE.api.bungeePlayers; + +import net.md_5.bungee.BungeeCord; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.PlayerDisconnectEvent; +import net.md_5.bungee.api.event.PluginMessageEvent; +import net.md_5.bungee.api.event.PostLoginEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; +import net.t2code.t2codelib.BUNGEE.api.messages.T2CBsend; +import net.t2code.t2codelib.BUNGEE.system.T2CodeBMain; +import net.t2code.t2codelib.SPIGOT.api.bungeePlayers.T2CbungeePlayersEnum; + +import java.io.*; +import java.util.logging.Logger; + +public class T2CBbungeePlayers implements Listener { + + @EventHandler + public void onJoin(PostLoginEvent e) { + sendToSpigotPlayer(e.getPlayer().getName(), T2CbungeePlayersEnum.JOIN, ""); + } + + @EventHandler + public void onDisconnect(PlayerDisconnectEvent e) { + sendToSpigotPlayer(e.getPlayer().getName(), T2CbungeePlayersEnum.QUIT, ""); + } + + public static void sendToSpigotPlayer(String name, T2CbungeePlayersEnum value, String uuid) { + switch (value) { + case JOIN: + case QUIT: + sendToSpigotPlayerExecute(name, value, uuid); + break; + case GIVEALL: + StringBuilder input = new StringBuilder(); + for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) { + input.append(player.getName()).append(";"); + } + sendToSpigotPlayerExecute(input.toString(), T2CbungeePlayersEnum.GIVEALL, uuid); + break; + } + } + + private static void sendToSpigotPlayerExecute(String name, T2CbungeePlayersEnum value, String uuid) { + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + DataOutputStream output = new DataOutputStream(stream); + try { + output.writeUTF(value.name()); + output.writeUTF(name); + output.writeUTF(uuid); + } catch (IOException e) { + Logger.getLogger(e.getMessage()); + } + T2CBsend.debug(T2CodeBMain.getPlugin(), "PluginMessage received channel: t2c:bonlp"); + T2CBsend.debug(T2CodeBMain.getPlugin(), "PluginMessage received subChannel: " + value.name()); + T2CBsend.debug(T2CodeBMain.getPlugin(), "PluginMessage received input: " + name); + T2CBsend.debug(T2CodeBMain.getPlugin(), "PluginMessage received input2/uuid: " + uuid); + BungeeCord.getInstance().getServers().values().stream().forEach((server) -> { + server.sendData("t2c:bonlp", stream.toByteArray()); + }); + } + + public static void sendToSpigotDeleteAll() { + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + DataOutputStream output = new DataOutputStream(stream); + try { + output.writeUTF(T2CbungeePlayersEnum.CLEAR.name()); + output.writeUTF(""); + output.writeUTF(""); + } catch (IOException e) { + Logger.getLogger(e.getMessage()); + } + BungeeCord.getInstance().getServers().values().stream().forEach((server) -> { + server.sendData("t2c:bonlp", stream.toByteArray()); + }); + } + + @EventHandler + public void onPluginMessage(PluginMessageEvent event) { + if (event.getTag().equalsIgnoreCase("t2c:bonlp")) { + DataInputStream stream = new DataInputStream(new ByteArrayInputStream(event.getData())); + event.setCancelled(true); + try { + T2CbungeePlayersEnum subChannel = T2CbungeePlayersEnum.valueOf(stream.readUTF()); + String input = stream.readUTF(); + + T2CBsend.debug(T2CodeBMain.getPlugin(), "PluginMessage received channel: " + event.getTag()); + T2CBsend.debug(T2CodeBMain.getPlugin(), "PluginMessage received subChannel: " + subChannel.name()); + T2CBsend.debug(T2CodeBMain.getPlugin(), "PluginMessage received input/uuid: " + input); + + sendToSpigotPlayer("", subChannel, input); + } catch (IOException e) { + e.printStackTrace(); + } + } + } +} diff --git a/src/main/java/net/t2code/t2codelib/BUNGEE/system/T2CBload.java b/src/main/java/net/t2code/t2codelib/BUNGEE/system/T2CBload.java index 233828d..11623dc 100644 --- a/src/main/java/net/t2code/t2codelib/BUNGEE/system/T2CBload.java +++ b/src/main/java/net/t2code/t2codelib/BUNGEE/system/T2CBload.java @@ -5,6 +5,7 @@ import net.t2code.t2codelib.BUNGEE.api.messages.T2CBsend; import net.t2code.t2codelib.BUNGEE.api.update.T2CBupdateAPI; import net.t2code.t2codelib.BUNGEE.system.bstats.T2CBmetrics; import net.t2code.t2codelib.BUNGEE.system.config.T2CBlibConfig; +import net.t2code.t2codelib.BUNGEE.api.bungeePlayers.T2CBbungeePlayers; import net.t2code.t2codelib.BUNGEE.system.pluginMessaging.T2CplmsgBcmd; import net.t2code.t2codelib.BUNGEE.system.pluginMessaging.autoResponse.T2CapiAutoResponse; import net.t2code.t2codelib.BUNGEE.system.pluginMessaging.commandgui.T2CapiCGUI; @@ -39,6 +40,10 @@ public class T2CBload { plugin.getProxy().registerChannel("t2c:bcmd"); plugin.getProxy().getPluginManager().registerListener(plugin, new T2CplmsgBcmd()); + plugin.getProxy().registerChannel("t2c:bonlp"); + plugin.getProxy().getPluginManager().registerListener(plugin, new T2CBbungeePlayers()); + T2CBbungeePlayers.sendToSpigotDeleteAll(); + if (T2CBlibConfig.getApiCommandGUIEnable()) { plugin.getProxy().registerChannel("t2c:cguiopl"); plugin.getProxy().getPluginManager().registerListener(plugin, new T2CapiCGUI()); diff --git a/src/main/java/net/t2code/t2codelib/BUNGEE/system/T2CodeBMain.java b/src/main/java/net/t2code/t2codelib/BUNGEE/system/T2CodeBMain.java index 0900eae..4202e1a 100644 --- a/src/main/java/net/t2code/t2codelib/BUNGEE/system/T2CodeBMain.java +++ b/src/main/java/net/t2code/t2codelib/BUNGEE/system/T2CodeBMain.java @@ -1,9 +1,9 @@ package net.t2code.t2codelib.BUNGEE.system; -import lombok.NonNull; import net.kyori.adventure.platform.bungeecord.BungeeAudiences; import net.md_5.bungee.api.plugin.Plugin; import net.t2code.t2codelib.BUNGEE.api.messages.T2CBsend; +import net.t2code.t2codelib.BUNGEE.api.bungeePlayers.T2CBbungeePlayers; import net.t2code.t2codelib.Util; public class T2CodeBMain extends Plugin { @@ -51,6 +51,7 @@ public class T2CodeBMain extends Plugin { @Override public void onDisable() { // Plugin shutdown logic + T2CBbungeePlayers.sendToSpigotDeleteAll(); if (mmIsLoad){ if(adventure != null) { adventure.close(); diff --git a/src/main/java/net/t2code/t2codelib/SPIGOT/api/bungeePlayers/T2CbungeePlayers.java b/src/main/java/net/t2code/t2codelib/SPIGOT/api/bungeePlayers/T2CbungeePlayers.java new file mode 100644 index 0000000..16a400d --- /dev/null +++ b/src/main/java/net/t2code/t2codelib/SPIGOT/api/bungeePlayers/T2CbungeePlayers.java @@ -0,0 +1,84 @@ +package net.t2code.t2codelib.SPIGOT.api.bungeePlayers; + +import lombok.Getter; +import net.t2code.t2codelib.SPIGOT.api.messages.T2Csend; +import net.t2code.t2codelib.SPIGOT.system.T2CodeLibMain; +import net.t2code.t2codelib.Util; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.messaging.PluginMessageListener; + +import java.io.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class T2CbungeePlayers implements PluginMessageListener { + @Getter + private static List bungeePlayers = new ArrayList<>(); + + @Override + public void onPluginMessageReceived(String channel, Player player, byte[] message) { + DataInputStream stream = new DataInputStream(new ByteArrayInputStream(message)); + T2Csend.debug(T2CodeLibMain.getPlugin(), "stream: " + stream.toString()); + try { + T2CbungeePlayersEnum subChannel = T2CbungeePlayersEnum.valueOf(stream.readUTF()); + String input = stream.readUTF(); + String uuid = stream.readUTF(); + T2Csend.debug(T2CodeLibMain.getPlugin(), "PluginMessage received channel: " + channel); + T2Csend.debug(T2CodeLibMain.getPlugin(), "PluginMessage received subChannel: " + subChannel.name()); + T2Csend.debug(T2CodeLibMain.getPlugin(), "PluginMessage received input: " + input); + T2Csend.debug(T2CodeLibMain.getPlugin(), "PluginMessage received input2/uuid: " + uuid); + switch (subChannel) { + case JOIN: + bungeePlayers.add(input); + break; + case QUIT: + bungeePlayers.remove(input); + break; + case GIVEALL: + if (!Util.getServerUUID().toString().equals(uuid)) { + return; + } + bungeePlayers.clear(); + String[] in = input.split(";"); + bungeePlayers.addAll(Arrays.asList(in)); + break; + case CLEAR: + bungeePlayers.clear(); + break; + } + } catch (IOException e) { + e.printStackTrace(); + } + + } + + public static void callAllBungeePlayers() { + if (Bukkit.getOnlinePlayers().isEmpty()) { + Bukkit.getScheduler().runTaskLaterAsynchronously(T2CodeLibMain.getPlugin(), new Runnable() { + @Override + public void run() { + callAllBungeePlayers(); + } + }, 20L); + return; + } + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + DataOutputStream output = new DataOutputStream(stream); + try { + output.writeUTF(T2CbungeePlayersEnum.GIVEALL.name()); + output.writeUTF(Util.getServerUUID().toString()); + } catch (IOException e) { + e.printStackTrace(); + } + + for (Player player : Bukkit.getOnlinePlayers()) { + player.sendPluginMessage(T2CodeLibMain.getPlugin(), "t2c:bonlp", stream.toByteArray()); + T2Csend.debug(T2CodeLibMain.getPlugin(), "PluginMessage received channel: t2c:bonlp"); + T2Csend.debug(T2CodeLibMain.getPlugin(), "PluginMessage send subChannel: " + T2CbungeePlayersEnum.GIVEALL.name()); + T2Csend.debug(T2CodeLibMain.getPlugin(), "PluginMessage send output/uuid: " + Util.getServerUUID().toString()); + return; + } + } +} diff --git a/src/main/java/net/t2code/t2codelib/SPIGOT/api/bungeePlayers/T2CbungeePlayersEnum.java b/src/main/java/net/t2code/t2codelib/SPIGOT/api/bungeePlayers/T2CbungeePlayersEnum.java new file mode 100644 index 0000000..d769e53 --- /dev/null +++ b/src/main/java/net/t2code/t2codelib/SPIGOT/api/bungeePlayers/T2CbungeePlayersEnum.java @@ -0,0 +1,8 @@ +package net.t2code.t2codelib.SPIGOT.api.bungeePlayers; + +public enum T2CbungeePlayersEnum { + JOIN, + QUIT, + GIVEALL, + CLEAR +} diff --git a/src/main/java/net/t2code/t2codelib/SPIGOT/api/commands/T2Ccmd.java b/src/main/java/net/t2code/t2codelib/SPIGOT/api/commands/T2Ccmd.java index 347b50a..cabd1bf 100644 --- a/src/main/java/net/t2code/t2codelib/SPIGOT/api/commands/T2Ccmd.java +++ b/src/main/java/net/t2code/t2codelib/SPIGOT/api/commands/T2Ccmd.java @@ -1,24 +1,24 @@ package net.t2code.t2codelib.SPIGOT.api.commands; -import net.t2code.t2codelib.SPIGOT.system.BCommandSenderReciver; +import net.t2code.t2codelib.SPIGOT.system.T2CbungeeCommandSenderReciver; import org.bukkit.Bukkit; import org.bukkit.entity.Player; public class T2Ccmd { public static void console(String cmd) { if (cmd.contains("!onBungee")){ - BCommandSenderReciver.sendToBungee(null, cmd.replace("!onBungee", ""), true); + T2CbungeeCommandSenderReciver.sendToBungee(null, cmd.replace("!onBungee", ""), true); }else Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), cmd); } public static void player(Player player, String cmd) { if (cmd.contains("!asConsole")) { if (cmd.contains("!onBungee")) { - BCommandSenderReciver.sendToBungee(player, cmd.replace("!asConsole", "").replace("!onBungee", ""), true); + T2CbungeeCommandSenderReciver.sendToBungee(player, cmd.replace("!asConsole", "").replace("!onBungee", ""), true); } else console(cmd.replace("!asConsole", "")); } else { if (cmd.contains("!onBungee")) { - BCommandSenderReciver.sendToBungee(player, cmd.replace("!onBungee", ""), false); + T2CbungeeCommandSenderReciver.sendToBungee(player, cmd.replace("!onBungee", ""), false); } else player.chat("/" + cmd); } } diff --git a/src/main/java/net/t2code/t2codelib/SPIGOT/api/messages/T2Csend.java b/src/main/java/net/t2code/t2codelib/SPIGOT/api/messages/T2Csend.java index 788703f..c91a365 100644 --- a/src/main/java/net/t2code/t2codelib/SPIGOT/api/messages/T2Csend.java +++ b/src/main/java/net/t2code/t2codelib/SPIGOT/api/messages/T2Csend.java @@ -44,16 +44,20 @@ public class T2Csend { public static void debug(Plugin plugin, String msg, Integer stage) { // if (!new File(Main.getPath(), "config.yml").exists()) return; if (stage == null) { - if (plugin.getConfig().getBoolean("Plugin.Debug")) + if (plugin.getConfig().getBoolean("Plugin.Debug") || plugin.getConfig().getBoolean("plugin.debug") || plugin.getConfig().getBoolean("Debug") || plugin.getConfig().getBoolean("debug")){ + info(plugin, ""); Bukkit.getConsoleSender().sendMessage(plugin.getDescription().getPrefix() + " §5DEBUG: §6" + msg); + } return; } - if (plugin.getConfig().getInt("Plugin.Debug") >= stage) + if (plugin.getConfig().getInt("Plugin.Debug") >= stage || plugin.getConfig().getInt("plugin.debug") >= stage || plugin.getConfig().getInt("Debug") >= stage || plugin.getConfig().getInt("debug") >= stage) { + info(plugin, ""); Bukkit.getConsoleSender().sendMessage(plugin.getDescription().getPrefix() + " §5DEBUG: §6" + msg); + } } public static void debugmsg(Plugin plugin, String msg) { - warning(plugin,""); + warning(plugin, ""); Bukkit.getConsoleSender().sendMessage("§e[" + plugin.getDescription().getPrefix() + "] §5DEBUG-MSG: §6" + msg); } diff --git a/src/main/java/net/t2code/t2codelib/SPIGOT/system/BCommandSenderReciver.java b/src/main/java/net/t2code/t2codelib/SPIGOT/system/T2CbungeeCommandSenderReciver.java similarity index 96% rename from src/main/java/net/t2code/t2codelib/SPIGOT/system/BCommandSenderReciver.java rename to src/main/java/net/t2code/t2codelib/SPIGOT/system/T2CbungeeCommandSenderReciver.java index 97ab8c4..b585d5e 100644 --- a/src/main/java/net/t2code/t2codelib/SPIGOT/system/BCommandSenderReciver.java +++ b/src/main/java/net/t2code/t2codelib/SPIGOT/system/T2CbungeeCommandSenderReciver.java @@ -8,7 +8,7 @@ import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; -public class BCommandSenderReciver { +public class T2CbungeeCommandSenderReciver { public static void sendToBungee(CommandSender sender, String information, Boolean console) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); diff --git a/src/main/java/net/t2code/t2codelib/SPIGOT/system/T2CodeLibMain.java b/src/main/java/net/t2code/t2codelib/SPIGOT/system/T2CodeLibMain.java index 2776ddd..50b494f 100644 --- a/src/main/java/net/t2code/t2codelib/SPIGOT/system/T2CodeLibMain.java +++ b/src/main/java/net/t2code/t2codelib/SPIGOT/system/T2CodeLibMain.java @@ -4,6 +4,7 @@ import lombok.Getter; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.permission.Permission; +import net.t2code.t2codelib.SPIGOT.api.bungeePlayers.T2CbungeePlayers; import net.t2code.t2codelib.SPIGOT.api.items.T2CitemVersion; import net.t2code.t2codelib.SPIGOT.api.messages.T2Csend; import net.t2code.t2codelib.SPIGOT.api.messages.T2Ctemplate; @@ -50,6 +51,7 @@ public final class T2CodeLibMain extends JavaPlugin { mmIsLoad = false; } long long_ = T2Ctemplate.onLoadHeader(Util.getPrefix(), autor, version, Util.getSpigot(), Util.getDiscord()); + checkIsBungee(); String prefix = Util.getPrefix(); try { @@ -106,11 +108,17 @@ public final class T2CodeLibMain extends JavaPlugin { Metrics.Bstats(plugin, Util.getBstatsID()); if (SelectLibConfig.getBungee()) { Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, "t2c:bcmd"); + Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, "t2c:bonlp"); + if (!Bukkit.getMessenger().isIncomingChannelRegistered(plugin, "t2c:bonlp")) { + T2Csend.debug(plugin, "registerIncomingPluginChannel §et2c:bonlp"); + Bukkit.getMessenger().registerIncomingPluginChannel(plugin, "t2c:bonlp", new T2CbungeePlayers()); + T2CbungeePlayers.callAllBungeePlayers(); + } } ReportLogStorage.load(); Bukkit.getServer().getPluginManager().registerEvents(new JoinEvent(), plugin); - checkIsBungee(); + T2Ctemplate.onLoadFooter(prefix, long_); load = true; } diff --git a/src/main/java/net/t2code/t2codelib/SPIGOT/system/cmd/CmdExecuter.java b/src/main/java/net/t2code/t2codelib/SPIGOT/system/cmd/CmdExecuter.java index 32bcf3a..327e68d 100644 --- a/src/main/java/net/t2code/t2codelib/SPIGOT/system/cmd/CmdExecuter.java +++ b/src/main/java/net/t2code/t2codelib/SPIGOT/system/cmd/CmdExecuter.java @@ -2,6 +2,7 @@ package net.t2code.t2codelib.SPIGOT.system.cmd; import net.t2code.t2codelib.SPIGOT.api.messages.T2Csend; import net.t2code.t2codelib.SPIGOT.api.update.T2CupdateAPI; +import net.t2code.t2codelib.SPIGOT.api.bungeePlayers.T2CbungeePlayers; import net.t2code.t2codelib.T2CupdateObject; import net.t2code.t2codelib.SPIGOT.system.config.config.SelectLibConfig; import org.bukkit.command.Command; @@ -44,6 +45,9 @@ public class CmdExecuter implements CommandExecutor, TabCompleter { case "debug": Commands.debug(sender,args); return false; + case "test": + T2Csend.sender(sender, T2CbungeePlayers.getBungeePlayers().toString()); + return false; default: T2Csend.sender(sender, "§4Use: §7/t2code debug createReportLog"); diff --git a/src/main/java/net/t2code/t2codelib/SPIGOT/system/config/config/ConfigCreate.java b/src/main/java/net/t2code/t2codelib/SPIGOT/system/config/config/ConfigCreate.java index 4b20482..5abb50e 100644 --- a/src/main/java/net/t2code/t2codelib/SPIGOT/system/config/config/ConfigCreate.java +++ b/src/main/java/net/t2code/t2codelib/SPIGOT/system/config/config/ConfigCreate.java @@ -27,7 +27,7 @@ public class ConfigCreate { T2Cconfig.set("Plugin.UpdateCheck.SeePreReleaseUpdates", true, yamlConfiguration); T2Cconfig.set("Plugin.language", "english", yamlConfiguration); - T2Cconfig.set("BungeeCord.Enable", false, yamlConfiguration); + T2Cconfig.set("BungeeCord.Enable", T2CodeLibMain.getIsBungee(), yamlConfiguration); T2Cconfig.set("Player.Inventories.CloseByServerStop", true, yamlConfiguration); try { diff --git a/src/main/java/net/t2code/t2codelib/SPIGOT/system/config/config/SelectLibConfig.java b/src/main/java/net/t2code/t2codelib/SPIGOT/system/config/config/SelectLibConfig.java index 5ac9f9a..a78fa7d 100644 --- a/src/main/java/net/t2code/t2codelib/SPIGOT/system/config/config/SelectLibConfig.java +++ b/src/main/java/net/t2code/t2codelib/SPIGOT/system/config/config/SelectLibConfig.java @@ -20,7 +20,7 @@ public class SelectLibConfig { File config = new File(T2CodeLibMain.getPath(), "config.yml"); YamlConfiguration yamlConfiguration = YamlConfiguration.loadConfiguration(config); - if (yamlConfiguration.contains("t2cTestDevelopment")){ + if (yamlConfiguration.contains("t2cTestDevelopment")) { t2cTestDevelopment = yamlConfiguration.getBoolean("t2cTestDevelopment"); } diff --git a/src/main/java/net/t2code/t2codelib/Util.java b/src/main/java/net/t2code/t2codelib/Util.java index f149e52..1b992cf 100644 --- a/src/main/java/net/t2code/t2codelib/Util.java +++ b/src/main/java/net/t2code/t2codelib/Util.java @@ -1,10 +1,17 @@ package net.t2code.t2codelib; +import lombok.Getter; + import java.util.Arrays; import java.util.List; +import java.util.UUID; public class Util { + @Getter + private static final UUID serverUUID = UUID.randomUUID(); + + public static String getInfoText() { return ""; }