diff --git a/.idea/compiler.xml b/.idea/compiler.xml index d6dd31d..162deb7 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,6 +6,8 @@ + + diff --git a/.idea/encodings.xml b/.idea/encodings.xml index bd7c065..3009cc7 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -8,5 +8,9 @@ + + + + \ No newline at end of file diff --git a/2b2t-core/src/main/java/org.cn2b2t.core/managers/utils/ServersManager.java b/2b2t-core/src/main/java/org.cn2b2t.core/managers/utils/ServersManager.java index d31e9fb..25955b0 100644 --- a/2b2t-core/src/main/java/org.cn2b2t.core/managers/utils/ServersManager.java +++ b/2b2t-core/src/main/java/org.cn2b2t.core/managers/utils/ServersManager.java @@ -1,9 +1,10 @@ package org.cn2b2t.core.managers.utils; -import org.cn2b2t.core.Main; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; +import org.cn2b2t.core.Main; +import org.cn2b2t.core.managers.users.UserValueManager; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -19,12 +20,12 @@ public class ServersManager { - public static List requests = new ArrayList<>(); - public static List allPlayers = new ArrayList<>(); + public static List requests = new ArrayList<>(); + public static List allPlayers = new ArrayList<>(); - public static void init() { - Main.getInstance().getServer().getMessenger().registerOutgoingPluginChannel(Main.getInstance(), "BungeeCord"); - Bukkit.getMessenger().registerOutgoingPluginChannel(Main.getInstance(), "BeeSwitch"); + public static void init() { + Main.getInstance().getServer().getMessenger().registerOutgoingPluginChannel(Main.getInstance(), "BungeeCord"); + Bukkit.getMessenger().registerOutgoingPluginChannel(Main.getInstance(), "BeeSwitch"); // Core.getInstance().getServer().getMessenger().registerIncomingPluginChannel(Core.getInstance(), "BungeeCord", new ServersManager()); // new BukkitRunnable() { // @Override @@ -34,7 +35,7 @@ public class ServersManager // // } // }.runTaskTimer(Core.getInstance(), 60L, 200L); - } + } // public static void sendGetPlayerList() { // ByteArrayOutputStream b = new ByteArrayOutputStream(); @@ -66,40 +67,46 @@ public class ServersManager // } // } - public static void teleport(Player p, String server) { - ByteArrayOutputStream b = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(b); - try { - out.writeUTF("ConnectOther"); - out.writeUTF(p.getName()); - out.writeUTF(server); - } catch (IOException ex) { - Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); - } - p.sendPluginMessage(Main.getInstance(), "BungeeCord", b.toByteArray()); - } + public static void teleport(Player p, String server) { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(b); + try { + out.writeUTF("ConnectOther"); + out.writeUTF(p.getName()); + out.writeUTF(server); + } catch (IOException ex) { + Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); + } + p.sendPluginMessage(Main.getInstance(), "BungeeCord", b.toByteArray()); + } - public static void teleport(Player player, String server, int t) { - requests.add(player); - new BukkitRunnable() { - @Override - public void run() { - if (requests.contains(player) && player.isOnline()) { - teleport(player, server); - requests.remove(player); - } - cancel(); - } - }.runTaskLater(Main.getInstance(), 20L * t); - } + public static void teleport(Player player, String server, int t) { + requests.add(player); + new BukkitRunnable() { + @Override + public void run() { + if (requests.contains(player) && player.isOnline()) { + teleport(player, server); + requests.remove(player); + } + cancel(); + } + }.runTaskLater(Main.getInstance(), 20L * t); + } - public static void backToLobby(Player p) { - teleport(p, "lobby"); - } - public static void switchServer(Player p, String targetServerIp) { - p.sendPluginMessage(Main.getInstance(), "BeeSwitch", targetServerIp.getBytes(StandardCharsets.UTF_8)); - } + + public static void goAFK(Player p) { + teleport(p, "SYSTEM.LIMBO"); + } + + public static void backToLobby(Player p) { + teleport(p, "lobby"); + } + + public static void switchServer(Player p, String targetServerIp) { + p.sendPluginMessage(Main.getInstance(), "BeeSwitch", targetServerIp.getBytes(StandardCharsets.UTF_8)); + } } diff --git a/2b2t-core/src/main/java/org.cn2b2t.core/modules/users/User.java b/2b2t-core/src/main/java/org.cn2b2t.core/modules/users/User.java index 6616060..49dc3e3 100644 --- a/2b2t-core/src/main/java/org.cn2b2t.core/modules/users/User.java +++ b/2b2t-core/src/main/java/org.cn2b2t.core/modules/users/User.java @@ -1,20 +1,20 @@ package org.cn2b2t.core.modules.users; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; import org.cn2b2t.core.Main; import org.cn2b2t.core.events.UserLoadedEvent; +import org.cn2b2t.core.managers.utils.DataManager; import org.cn2b2t.core.managers.utils.UserManager; import org.cn2b2t.core.managers.utils.scoreboard.CeramicScoreboard; import org.cn2b2t.core.managers.utils.scoreboard.ScoreBoardRender; import org.cn2b2t.core.modules.gui.GUI; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; +import org.cn2b2t.core.utils.UUIDUtils; import org.spigotmc.AsyncCatcher; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.sql.ResultSet; +import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; @@ -22,6 +22,10 @@ public class User { private final Player player; + private int inkID; + private UUID mojangUUID; + private boolean onlineMode; + private Map handler = new HashMap<>(); public GUI openedGUI; @@ -50,6 +54,34 @@ public class User { }); + try { + ResultSet accountResult = DataManager.getConnection().SQLquery("nl2_users", + "uuid", player.getUniqueId().toString().replace("-", "")); + if (accountResult != null) { + if (accountResult.next()) { + User.this.inkID = accountResult.getInt("id"); + String muuid = accountResult.getString("mojanguuid"); + if (muuid != null && !muuid.isEmpty() && !muuid.equalsIgnoreCase("null")) { + User.this.mojangUUID = UUIDUtils.toUUID(muuid); + } + User.this.onlineMode = mojangUUID != null; + } else { + accountResult.close(); + throw new NullPointerException("Cannot find user profile. name=" + player.getName() + " uuid=" + player.getUniqueId()); + } + accountResult.close(); + } + } catch (Exception ex) { + ex.printStackTrace(); + new BukkitRunnable() { + @Override + public void run() { + getPlayer().kickPlayer("关键信息加载失败,请联系管理员\nKey information loading failed. Please turn to administrator."); + } + }.runTask(Main.getInstance()); + } + + new BukkitRunnable() { @Override public void run() { @@ -71,6 +103,17 @@ public class User { } + public boolean isFullLoaded() { + return fullLoaded; + } + + public boolean isOnlineMode() { + return onlineMode; + } + + public UUID getMojangUUID() { + return mojangUUID; + } public List getScoreboards() { return this.scoreboards; @@ -119,6 +162,10 @@ public class User { } } + public int getInkID() { + return inkID; + } + public T getHandler(String s, Class T) { if (isUnregistered()) { AsyncCatcher.catchOp("handler get when user unloaded"); diff --git a/2b2t-core/src/main/java/org.cn2b2t.core/utils/UUIDUtils.java b/2b2t-core/src/main/java/org.cn2b2t.core/utils/UUIDUtils.java new file mode 100644 index 0000000..8d35bb9 --- /dev/null +++ b/2b2t-core/src/main/java/org.cn2b2t.core/utils/UUIDUtils.java @@ -0,0 +1,25 @@ +package org.cn2b2t.core.utils; + +import java.util.UUID; + +public class UUIDUtils { + + public static UUID toUUID(String s){ + if(s.length() == 36){ + return UUID.fromString(s); + } else { + StringBuilder sb = new StringBuilder(36); + sb.append(s, 0, 8) + .append('-') + .append(s, 8, 12) + .append('-') + .append(s, 12, 16) + .append('-') + .append(s, 16, 20) + .append('-') + .append(s.substring(20)); + return UUID.fromString(sb.toString()); + } + } + +} diff --git a/2b2t-proxy/pom.xml b/2b2t-proxy/pom.xml new file mode 100644 index 0000000..aa0ec9c --- /dev/null +++ b/2b2t-proxy/pom.xml @@ -0,0 +1,15 @@ + + + + cn2b2t + org.cn2b2t + 1.0-SNAPSHOT + + 4.0.0 + + 2b2t-proxy + + + \ No newline at end of file diff --git a/ImperialGuards/pom.xml b/ImperialGuards/pom.xml new file mode 100644 index 0000000..94e2a61 --- /dev/null +++ b/ImperialGuards/pom.xml @@ -0,0 +1,61 @@ + + + + cn2b2t + org.cn2b2t + 1.0-SNAPSHOT + + 4.0.0 + + ImperialGuards + jar + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + + + + + com.comphenix + ProtocolLib + 4.3.0 + system + ${basedir}/../_lib/ProtocolLib.jar + + + com.comphenix + PacketWrapper + 1.0 + system + ${basedir}/../_lib/PacketWrapper.jar + + + + org.spigotmc + spigot + 1.12.2-R0.1-SNAPSHOT + ${basedir}/../_lib/spigot.jar + system + + + org.cn2b2t + 2b2t-core + 1.0-SNAPSHOT + compile + + + + + + \ No newline at end of file diff --git a/ImperialGuards/src/main/java/cn/moci/ig/Main.java b/ImperialGuards/src/main/java/cn/moci/ig/Main.java new file mode 100644 index 0000000..46dc8ca --- /dev/null +++ b/ImperialGuards/src/main/java/cn/moci/ig/Main.java @@ -0,0 +1,46 @@ +package cn.moci.ig; + +import cn.moci.ig.commands.IG; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolManager; +import org.bukkit.ChatColor; +import org.bukkit.plugin.java.JavaPlugin; + +public class Main extends JavaPlugin { + + // + public static String pluginName = "ImperialGuards"; + public static String pluginVersion = "dev-SNAPSHOT"; + + private static Main instance; + public ProtocolManager protocolManager; + + public static Main getInstance() { + return Main.instance; + } + + public static String color(final String text) { + return text.replaceAll("&", "§"); + } + + private void pluginMessage(String s) { + this.getServer().getConsoleSender().sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.RED + "!" + ChatColor.DARK_GRAY + "] " + ChatColor.AQUA + pluginName + " " + ChatColor.WHITE + pluginVersion + ChatColor.GRAY + s); + } + + // + @Override + public void onEnable() { + protocolManager = ProtocolLibrary.getProtocolManager(); + Main.instance = this; + regCmds(); + pluginMessage("已启用。"); + + } + + + private void regCmds() { + this.getCommand("ig").setExecutor(new IG()); + } + + +} diff --git a/ImperialGuards/src/main/java/cn/moci/ig/commands/IG.java b/ImperialGuards/src/main/java/cn/moci/ig/commands/IG.java new file mode 100644 index 0000000..c658bd3 --- /dev/null +++ b/ImperialGuards/src/main/java/cn/moci/ig/commands/IG.java @@ -0,0 +1,66 @@ +package cn.moci.ig.commands; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.cn2b2t.core.managers.utils.ServersManager; +import org.cn2b2t.core.utils.ColorParser; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 最终解释权归 墨瓷工作室 。 + * + * @author Cam, LSeng. + */ +public class IG implements CommandExecutor { + + public static List queue = new ArrayList<>(); + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + return true; + } // /IG condition KUMR killaura 1000 5 -1 Hitbox(Killaura) kick %(Player) #ac Task #00001 for IG generated an exception; + if (args.length < 1) { + return true; + } + switch (args[0]) { + case "notify": { + // /IG notify {player} HackType + if (args.length < 2) { + return true; + } + String username = args[1]; + String reason = Arrays.stream(args, 2, args.length - 1).collect(Collectors.joining()); + return true; + } + case "punish": { + // /IG punish {player} HackType + String username = args[1]; + if (Bukkit.getPlayer(username) != null) { + Player p = Bukkit.getPlayer(username); + if (!p.hasPermission("ig.bypass")) { + ServersManager.goAFK(p); + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { + onlinePlayer.sendMessage(ColorParser.parse("&7玩家 &f" + p.getName() + " &7因&c疑似作弊&7被移出本局游戏。")); + onlinePlayer.sendMessage(ColorParser.parse("&7保持良好游戏环境需要各位的努力,感谢各位的支持。")); + } + } + } + + return true; + } + default: { + return true; + } + + } + } + +} diff --git a/ImperialGuards/src/main/resources/plugin.yml b/ImperialGuards/src/main/resources/plugin.yml new file mode 100644 index 0000000..c77a3ef --- /dev/null +++ b/ImperialGuards/src/main/resources/plugin.yml @@ -0,0 +1,8 @@ +name: ImperialGuards +main: cn.moci.ig.Main +version: 1.0.0 - SNAPSHOT +author: Moci +depend: [ProtocolLib] +commands: + ig: + aliases: [imperialguards] \ No newline at end of file diff --git a/pom.xml b/pom.xml index 2164385..bd026f3 100644 --- a/pom.xml +++ b/pom.xml @@ -13,6 +13,8 @@ 2b2t-common 2b2t-core 2b2t-faction + 2b2t-proxy + ImperialGuards