diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/CatScheduler.java b/src/main/java/cc/baka9/catseedlogin/bukkit/CatScheduler.java
index 0fa9a1b..7634891 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/CatScheduler.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/CatScheduler.java
@@ -24,6 +24,7 @@ private static Method initTeleportAsync() {
}
public static void teleport(Player player, Location location) {
+ if (location == null || location.getWorld() == null) return;
if (!folia) {
player.teleport(location);
return;
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/CatSeedLogin.java b/src/main/java/cc/baka9/catseedlogin/bukkit/CatSeedLogin.java
index e78a37d..d506811 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/CatSeedLogin.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/CatSeedLogin.java
@@ -13,16 +13,8 @@
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
-import cc.baka9.catseedlogin.bukkit.command.CommandBindEmail;
-import cc.baka9.catseedlogin.bukkit.command.CommandCatSeedLogin;
-import cc.baka9.catseedlogin.bukkit.command.CommandChangePassword;
-import cc.baka9.catseedlogin.bukkit.command.CommandLogin;
-import cc.baka9.catseedlogin.bukkit.command.CommandRegister;
-import cc.baka9.catseedlogin.bukkit.command.CommandResetPassword;
-import cc.baka9.catseedlogin.bukkit.database.Cache;
-import cc.baka9.catseedlogin.bukkit.database.MySQL;
-import cc.baka9.catseedlogin.bukkit.database.SQL;
-import cc.baka9.catseedlogin.bukkit.database.SQLite;
+import cc.baka9.catseedlogin.bukkit.command.*;
+import cc.baka9.catseedlogin.bukkit.database.*;
import cc.baka9.catseedlogin.bukkit.object.LoginPlayerHelper;
import cc.baka9.catseedlogin.bukkit.task.Task;
import cn.handyplus.lib.adapter.HandySchedulerUtil;
@@ -140,8 +132,7 @@ private void registerCommands() {
return Collections.emptyList();
});
- PluginCommand catseedlogin = getServer().getPluginCommand("catseedlogin");
- catseedlogin.setExecutor(new CommandCatSeedLogin());
+ getServer().getPluginCommand("catseedlogin").setExecutor(new CommandCatSeedLogin());
}
@EventHandler
@@ -169,7 +160,7 @@ public void onDisable() {
});
try {
- if (sql.getConnection() != null) { // 检查连接不为null
+ if (sql.getConnection() != null) {
sql.getConnection().close();
}
} catch (Exception e) {
@@ -181,7 +172,7 @@ public void onDisable() {
}
public void runTaskAsync(Runnable runnable) {
- if (runnable != null) { // 添加空值检查
+ if (runnable != null) {
CatScheduler.runTaskAsync(runnable);
}
}
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/Communication.java b/src/main/java/cc/baka9/catseedlogin/bukkit/Communication.java
index dc71cb5..59c031a 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/Communication.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/Communication.java
@@ -1,5 +1,12 @@
package cc.baka9.catseedlogin.bukkit;
+import cc.baka9.catseedlogin.bukkit.database.Cache;
+import cc.baka9.catseedlogin.bukkit.object.LoginPlayer;
+import cc.baka9.catseedlogin.bukkit.object.LoginPlayerHelper;
+import cc.baka9.catseedlogin.util.CommunicationAuth;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
@@ -7,68 +14,70 @@
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-
-import cc.baka9.catseedlogin.bukkit.database.Cache;
-import cc.baka9.catseedlogin.bukkit.object.LoginPlayer;
-import cc.baka9.catseedlogin.bukkit.object.LoginPlayerHelper;
-import cc.baka9.catseedlogin.util.CommunicationAuth;
+/**
+ * bukkit 与 bc 的通讯交流
+ */
public class Communication {
private static ServerSocket serverSocket;
- private static final ExecutorService executorService = Executors.newCachedThreadPool();
+ /**
+ * 异步关闭 socket server
+ */
public static void socketServerStopAsync() {
CatSeedLogin.instance.runTaskAsync(Communication::socketServerStop);
}
- public static synchronized void socketServerStop() {
- closeServerSocket(serverSocket);
+ public static void socketServerStop() {
+
+ if (serverSocket != null && !serverSocket.isClosed()) {
+ try {
+ serverSocket.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
}
+ /**
+ * 异步启动 socket server 监听bc端发来的请求
+ */
public static void socketServerStartAsync() {
CatSeedLogin.instance.runTaskAsync(Communication::socketServerStart);
}
-private static synchronized void socketServerStart() {
- try {
- InetAddress inetAddress = InetAddress.getByName(Config.BungeeCord.Host);
- serverSocket = new ServerSocket(Integer.parseInt(Config.BungeeCord.Port), 50, inetAddress);
- acceptConnections(serverSocket);
- } catch (UnknownHostException e) {
- CatSeedLogin.instance.getLogger().warning("无法解析域名或IP地址: " + e.getMessage());
- } catch (IOException e) {
- CatSeedLogin.instance.getLogger().warning("启动Socket服务器时发生错误: " + e.getMessage());
- }
-}
-
-private static void acceptConnections(ServerSocket serverSocket) {
- while (!serverSocket.isClosed()) {
+ /**
+ * 启动 socket server 监听bc端发来的请求
+ */
+ private static void socketServerStart() {
try {
- Socket socket = serverSocket.accept();
- executorService.submit(() -> handleRequest(socket));
- } catch (IOException e) {
- if (serverSocket.isClosed()) {
- break;
+ InetAddress inetAddress = InetAddress.getByName(Config.BungeeCord.Host);
+ serverSocket = new ServerSocket(Integer.parseInt(Config.BungeeCord.Port), 50, inetAddress);
+ while (!serverSocket.isClosed()) {
+ Socket socket;
+ try {
+ socket = serverSocket.accept();
+ handleRequest(socket);
+ } catch (IOException e) {
+ break;
+ }
}
- CatSeedLogin.instance.getLogger().warning("接受Socket连接时发生错误: " + e.getMessage());
+ } catch (UnknownHostException e) {
+ CatSeedLogin.instance.getLogger().warning("无法解析域名或IP地址");
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
}
}
-}
-private static void handleRequest(Socket socket) {
- BufferedReader bufferedReader = null;
- try {
- bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+ /**
+ * 处理请求
+ */
+ private static void handleRequest(Socket socket) throws IOException {
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String requestType = bufferedReader.readLine();
- if (requestType == null) {
- return;
- }
String playerName = bufferedReader.readLine();
switch (requestType) {
case "Connect":
@@ -78,60 +87,50 @@ private static void handleRequest(Socket socket) {
String time = bufferedReader.readLine();
String sign = bufferedReader.readLine();
handleKeepLoggedInRequest(playerName, time, sign);
+ socket.close();
break;
default:
- String sanitizedRequestType = requestType.replace("\n", "").replace("\r", "");
- CatSeedLogin.instance.getLogger().warning("未知请求类型: " + sanitizedRequestType);
break;
}
- } catch (IOException e) {
- CatSeedLogin.instance.getLogger().warning("处理请求时发生错误: " + e.getMessage());
}
-}
-private static void handleKeepLoggedInRequest(String playerName, String time, String sign) {
- if (CommunicationAuth.encryption(playerName, time, Config.BungeeCord.AuthKey).equals(sign)) {
- CatScheduler.runTask(() -> {
- LoginPlayer lp = Cache.getIgnoreCase(playerName);
- if (lp != null) {
- LoginPlayerHelper.add(lp);
- Player player = Bukkit.getPlayerExact(playerName);
- if (player != null) {
- player.updateInventory();
+ private static void handleKeepLoggedInRequest(String playerName, String time, String sign) {
+ // 验证请求的合法性
+ // 对比玩家名,时间戳,和authKey加密的结果(加密是因为如果登录服不在内网环境下,则可能会被人使用这个功能给发包来直接绕过登录)
+ if (CommunicationAuth.encryption(playerName, time, Config.BungeeCord.AuthKey).equals(sign)) {
+ // 切换主线程给予登录状态
+ Bukkit.getScheduler().runTask(CatSeedLogin.instance, () -> {
+ LoginPlayer lp = Cache.getIgnoreCase(playerName);
+ if (lp != null) {
+ LoginPlayerHelper.add(lp);
+ Player player = Bukkit.getPlayerExact(playerName);
+ if (player != null) {
+ player.updateInventory();
+ }
}
- } else {
- String sanitizedPlayerName = playerName.replace("\n", "").replace("\r", "");
- CatSeedLogin.instance.getLogger().warning("玩家 " + sanitizedPlayerName + " 未找到在缓存中。");
- }
- });
+
+ });
+ }
}
-}
private static void handleConnectRequest(Socket socket, String playerName) {
- CatScheduler.runTask(() -> {
+ // 切换主线程获取是否已登录
+ Bukkit.getScheduler().runTask(CatSeedLogin.instance, () -> {
boolean result = LoginPlayerHelper.isLogin(playerName);
- sendConnectResultAsync(socket, result);
- });
- }
- private static void sendConnectResultAsync(Socket socket, boolean result) {
- executorService.submit(() -> {
- try (Socket autoCloseSocket = socket) {
- autoCloseSocket.getOutputStream().write(result ? 1 : 0);
- autoCloseSocket.getOutputStream().flush();
- } catch (IOException e) {
- CatSeedLogin.instance.getLogger().warning("发送连接结果时发生错误: " + e.getMessage());
- }
+ // 切换异步线程返回结果
+ CatSeedLogin.instance.runTaskAsync(() -> {
+ try {
+ socket.getOutputStream().write(result ? 1 : 0);
+ socket.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ });
+
});
}
- private static void closeServerSocket(ServerSocket serverSocket) {
- if (serverSocket != null && !serverSocket.isClosed()) {
- try {
- serverSocket.close();
- } catch (IOException e) {
- CatSeedLogin.instance.getLogger().warning("关闭Socket服务器时发生错误: " + e.getMessage());
- }
- }
- }
+
}
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/ProtocolLibListeners.java b/src/main/java/cc/baka9/catseedlogin/bukkit/ProtocolLibListeners.java
index f27629c..2c6eac8 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/ProtocolLibListeners.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/ProtocolLibListeners.java
@@ -11,23 +11,19 @@
import org.bukkit.entity.Player;
public class ProtocolLibListeners extends PacketAdapter {
-
- public static void enable(){
+ public static void enable() {
ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
protocolManager.addPacketListener(new ProtocolLibListeners());
}
-
- public ProtocolLibListeners(){
+ public ProtocolLibListeners() {
super(CatSeedLogin.instance, ListenerPriority.HIGHEST,
PacketType.Play.Server.SET_SLOT,
- PacketType.Play.Server.WINDOW_ITEMS
- );
-
+ PacketType.Play.Server.WINDOW_ITEMS);
}
@Override
- public void onPacketSending(PacketEvent event){
+ public void onPacketSending(PacketEvent event) {
PacketType packetType = event.getPacketType();
if (packetType == PacketType.Play.Server.SET_SLOT || packetType == PacketType.Play.Server.WINDOW_ITEMS) {
Player player = event.getPlayer();
@@ -40,8 +36,6 @@ public void onPacketSending(PacketEvent event){
}
@Override
- public void onPacketReceiving(PacketEvent event){
+ public void onPacketReceiving(PacketEvent event) {
}
-
-
}
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandBindEmail.java b/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandBindEmail.java
index 0f256ae..032e072 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandBindEmail.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandBindEmail.java
@@ -1,13 +1,11 @@
package cc.baka9.catseedlogin.bukkit.command;
import java.util.Optional;
-
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 cc.baka9.catseedlogin.bukkit.CatSeedLogin;
import cc.baka9.catseedlogin.bukkit.Config;
import cc.baka9.catseedlogin.bukkit.database.Cache;
@@ -25,9 +23,7 @@ public boolean onCommand(CommandSender sender, Command command, String s, String
Player player = (Player) sender;
String name = player.getName();
- if (Config.Settings.BedrockLoginBypass && LoginPlayerHelper.isFloodgatePlayer(player)) {
- return true;
- }
+ if (Config.Settings.BedrockLoginBypass && LoginPlayerHelper.isFloodgatePlayer(player)) return true;
LoginPlayer lp = Cache.getIgnoreCase(name);
if (lp == null) {
@@ -93,11 +89,10 @@ public boolean onCommand(CommandSender sender, Command command, String s, String
private void sendEmailCode(CommandSender sender, String name, String mail, EmailCode bindEmail) {
CatSeedLogin.instance.runTaskAsync(() -> {
try {
- Mail.sendMail(mail, "邮箱绑定",
- "你的验证码是 " + bindEmail.getCode() + "" +
- "
在服务器中使用帐号 " + name + " 输入指令/bindemail verify " + bindEmail.getCode() + " 来绑定邮箱" +
- "
绑定邮箱之后可用于忘记密码时重置自己的密码" +
- "
此验证码有效期为 " + (bindEmail.getDurability() / (1000 * 60)) + "分钟");
+ Mail.sendMail(mail, "邮箱绑定", "你的验证码是 " + bindEmail.getCode() + "" +
+ "
在服务器中使用帐号 " + name + " 输入指令/bindemail verify " + bindEmail.getCode() + " 来绑定邮箱" +
+ "
绑定邮箱之后可用于忘记密码时重置自己的密码" +
+ "
此验证码有效期为 " + (bindEmail.getDurability() / (1000 * 60)) + "分钟");
Bukkit.getScheduler().runTask(CatSeedLogin.instance, () -> {
sender.sendMessage("§6已经向邮箱 " + mail + " 发送了一串绑定验证码,请检查你的邮箱的收件箱");
sender.sendMessage("§c如果未收到,请检查邮箱的垃圾箱!");
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandChangePassword.java b/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandChangePassword.java
index 1c7d8c7..db97b77 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandChangePassword.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandChangePassword.java
@@ -1,13 +1,11 @@
package cc.baka9.catseedlogin.bukkit.command;
import java.util.Objects;
-
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 cc.baka9.catseedlogin.bukkit.CatScheduler;
import cc.baka9.catseedlogin.bukkit.CatSeedLogin;
import cc.baka9.catseedlogin.bukkit.Config;
@@ -19,14 +17,10 @@
public class CommandChangePassword implements CommandExecutor {
@Override
- public boolean onCommand(CommandSender sender, Command command, String lable, String[] args){
- if (args.length != 3 || !(sender instanceof Player)) {
- return false;
- }
+ public boolean onCommand(CommandSender sender, Command command, String lable, String[] args) {
+ if (args.length != 3 || !(sender instanceof Player)) return false;
String name = sender.getName();
- if (Config.Settings.BedrockLoginBypass && LoginPlayerHelper.isFloodgatePlayer((Player) sender)){
- return true;
- }
+ if (Config.Settings.BedrockLoginBypass && LoginPlayerHelper.isFloodgatePlayer((Player) sender)) return true;
LoginPlayer lp = Cache.getIgnoreCase(name);
if (lp == null) {
sender.sendMessage(Config.Language.CHANGEPASSWORD_NOREGISTER);
@@ -39,7 +33,6 @@ public boolean onCommand(CommandSender sender, Command command, String lable, St
if (!Objects.equals(Crypt.encrypt(name, args[0]), lp.getPassword().trim())) {
sender.sendMessage(Config.Language.CHANGEPASSWORD_OLDPASSWORD_INCORRECT);
return true;
-
}
if (!args[1].equals(args[2])) {
sender.sendMessage(Config.Language.CHANGEPASSWORD_PASSWORD_CONFIRM_FAIL);
@@ -49,9 +42,7 @@ public boolean onCommand(CommandSender sender, Command command, String lable, St
sender.sendMessage(Config.Language.COMMON_PASSWORD_SO_SIMPLE);
return true;
}
- if (!Cache.isLoaded) {
- return true;
- }
+ if (!Cache.isLoaded) return true;
sender.sendMessage("§e修改中..");
CatSeedLogin.instance.runTaskAsync(() -> {
try {
@@ -59,7 +50,6 @@ public boolean onCommand(CommandSender sender, Command command, String lable, St
lp.crypt();
CatSeedLogin.sql.edit(lp);
LoginPlayerHelper.remove(lp);
-
CatScheduler.runTask(() -> {
Player player = Bukkit.getPlayer(((Player) sender).getUniqueId());
if (player != null && player.isOnline()) {
@@ -71,11 +61,8 @@ public boolean onCommand(CommandSender sender, Command command, String lable, St
LoginPlayerHelper.sendBlankInventoryPacket(player);
}
}
-
}
});
-
-
} catch (Exception e) {
e.printStackTrace();
sender.sendMessage("§c服务器内部错误!");
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandLogin.java b/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandLogin.java
index a5db830..3004576 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandLogin.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandLogin.java
@@ -1,13 +1,11 @@
package cc.baka9.catseedlogin.bukkit.command;
import java.util.Objects;
-
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 cc.baka9.catseedlogin.bukkit.CatScheduler;
import cc.baka9.catseedlogin.bukkit.Config;
import cc.baka9.catseedlogin.bukkit.database.Cache;
@@ -18,13 +16,11 @@
public class CommandLogin implements CommandExecutor {
@Override
- public boolean onCommand(CommandSender sender, Command command, String lable, String[] args){
+ public boolean onCommand(CommandSender sender, Command command, String lable, String[] args) {
if (args.length == 0 || !(sender instanceof Player)) return false;
Player player = (Player) sender;
String name = player.getName();
- if (Config.Settings.BedrockLoginBypass && LoginPlayerHelper.isFloodgatePlayer(player)){
- return true;
- }
+ if (Config.Settings.BedrockLoginBypass && LoginPlayerHelper.isFloodgatePlayer(player)) return true;
if (LoginPlayerHelper.isLogin(name)) {
sender.sendMessage(Config.Language.LOGIN_REPEAT);
return true;
@@ -42,7 +38,7 @@ public boolean onCommand(CommandSender sender, Command command, String lable, St
CatScheduler.updateInventory(player);
LoginPlayerHelper.recordCurrentIP(player, lp);
if (Config.Settings.AfterLoginBack && Config.Settings.CanTpSpawnLocation) {
- Config.getOfflineLocation(player).ifPresent(location -> CatScheduler.teleport(player,location));
+ Config.getOfflineLocation(player).ifPresent(location -> CatScheduler.teleport(player, location));
}
} else {
sender.sendMessage(Config.Language.LOGIN_FAIL);
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandRegister.java b/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandRegister.java
index 8084866..fc3136d 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandRegister.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandRegister.java
@@ -1,13 +1,11 @@
package cc.baka9.catseedlogin.bukkit.command;
import java.util.List;
-
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 cc.baka9.catseedlogin.bukkit.CatScheduler;
import cc.baka9.catseedlogin.bukkit.CatSeedLogin;
import cc.baka9.catseedlogin.bukkit.Config;
@@ -18,15 +16,12 @@
import cc.baka9.catseedlogin.util.Util;
public class CommandRegister implements CommandExecutor {
-
@Override
- public boolean onCommand(CommandSender sender, Command command, String lable, String[] args){
+ public boolean onCommand(CommandSender sender, Command command, String lable, String[] args) {
if (args.length != 2) return false;
Player player = (Player) sender;
String name = sender.getName();
- if (Config.Settings.BedrockLoginBypass && LoginPlayerHelper.isFloodgatePlayer(player)){
- return true;
- }
+ if (Config.Settings.BedrockLoginBypass && LoginPlayerHelper.isFloodgatePlayer(player)) return true;
if (LoginPlayerHelper.isLogin(name)) {
sender.sendMessage(Config.Language.REGISTER_AFTER_LOGIN_ALREADY);
return true;
@@ -43,9 +38,7 @@ public boolean onCommand(CommandSender sender, Command command, String lable, St
sender.sendMessage(Config.Language.COMMON_PASSWORD_SO_SIMPLE);
return true;
}
- if (!Cache.isLoaded) {
- return true;
- }
+ if (!Cache.isLoaded) return true;
sender.sendMessage("§e注册中..");
CatSeedLogin.instance.runTaskAsync(() -> {
try {
@@ -68,14 +61,11 @@ public boolean onCommand(CommandSender sender, Command command, String lable, St
CatScheduler.updateInventory(player);
LoginPlayerHelper.recordCurrentIP(player, lp);
}
-
-
} catch (Exception e) {
e.printStackTrace();
sender.sendMessage("§c服务器内部错误!");
}
});
return true;
-
}
}
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandResetPassword.java b/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandResetPassword.java
index d9697b2..acdfba8 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandResetPassword.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/command/CommandResetPassword.java
@@ -1,13 +1,11 @@
package cc.baka9.catseedlogin.bukkit.command;
import java.util.Optional;
-
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 cc.baka9.catseedlogin.bukkit.CatScheduler;
import cc.baka9.catseedlogin.bukkit.CatSeedLogin;
import cc.baka9.catseedlogin.bukkit.Config;
@@ -20,15 +18,12 @@
public class CommandResetPassword implements CommandExecutor {
@Override
- public boolean onCommand(CommandSender sender, Command command, String s, String[] args){
+ public boolean onCommand(CommandSender sender, Command command, String s, String[] args) {
if (args.length == 0 || !(sender instanceof Player)) return false;
Player player = (Player) sender;
String name = player.getName();
- if (Config.Settings.BedrockLoginBypass && LoginPlayerHelper.isFloodgatePlayer(player)){
- return true;
- }
+ if (Config.Settings.BedrockLoginBypass && LoginPlayerHelper.isFloodgatePlayer(player)) return true;
LoginPlayer lp = Cache.getIgnoreCase(name);
-
if (lp == null) {
sender.sendMessage(Config.Language.RESETPASSWORD_NOREGISTER);
return true;
@@ -37,7 +32,6 @@ public boolean onCommand(CommandSender sender, Command command, String s, String
sender.sendMessage(Config.Language.RESETPASSWORD_EMAIL_DISABLE);
return true;
}
- //command forget
if (args[0].equalsIgnoreCase("forget")) {
if (lp.getEmail() == null) {
sender.sendMessage(Config.Language.RESETPASSWORD_EMAIL_NO_SET);
@@ -46,16 +40,14 @@ public boolean onCommand(CommandSender sender, Command command, String s, String
if (optionalEmailCode.isPresent()) {
sender.sendMessage(Config.Language.RESETPASSWORD_EMAIL_REPEAT_SEND_MESSAGE.replace("{email}", optionalEmailCode.get().getEmail()));
} else {
- //20分钟有效期的验证码
EmailCode emailCode = EmailCode.create(name, lp.getEmail(), 1000 * 60 * 5, EmailCode.Type.ResetPassword);
sender.sendMessage(Config.Language.RESETPASSWORD_EMAIL_SENDING_MESSAGE.replace("{email}", lp.getEmail()));
CatSeedLogin.instance.runTaskAsync(() -> {
try {
if (emailCode != null) {
- Mail.sendMail(emailCode.getEmail(), "重置密码",
- "你的验证码是 " + emailCode.getCode() + "" +
- "
在服务器中使用帐号 " + name + " 输入指令/resetpassword re " + emailCode.getCode() + " 新密码 来重置新密码" +
- "
此验证码有效期为 " + (emailCode.getDurability() / (1000 * 60)) + "分钟");
+ Mail.sendMail(emailCode.getEmail(), "重置密码", "你的验证码是 " + emailCode.getCode() + "" +
+ "
在服务器中使用帐号 " + name + " 输入指令/resetpassword re " + emailCode.getCode() + " 新密码 来重置新密码" +
+ "
此验证码有效期为 " + (emailCode.getDurability() / (1000 * 60)) + "分钟");
}
Bukkit.getScheduler().runTask(CatSeedLogin.instance, () -> {
if (emailCode != null) {
@@ -71,7 +63,6 @@ public boolean onCommand(CommandSender sender, Command command, String s, String
}
return true;
}
- //command re
if (args[0].equalsIgnoreCase("re") && args.length > 2) {
if (lp.getEmail() == null) {
sender.sendMessage(Config.Language.RESETPASSWORD_EMAIL_NO_SET);
@@ -80,7 +71,6 @@ public boolean onCommand(CommandSender sender, Command command, String s, String
if (optionalEmailCode.isPresent()) {
EmailCode emailCode = optionalEmailCode.get();
String code = args[1], pwd = args[2];
-
if (emailCode.getCode().equals(code)) {
if (Util.passwordIsDifficulty(pwd)) {
sender.sendMessage(Config.Language.COMMON_PASSWORD_SO_SIMPLE);
@@ -98,27 +88,22 @@ public boolean onCommand(CommandSender sender, Command command, String s, String
Player p = Bukkit.getPlayer(lp.getName());
if (p != null && p.isOnline()) {
if (Config.Settings.CanTpSpawnLocation) {
- // PlayerTeleport.teleport(p, Config.Settings.SpawnLocation);
- CatScheduler.teleport(p,Config.Settings.SpawnLocation);
+ CatScheduler.teleport(p, Config.Settings.SpawnLocation);
}
p.sendMessage(Config.Language.RESETPASSWORD_SUCCESS);
if (CatSeedLogin.loadProtocolLib) {
LoginPlayerHelper.sendBlankInventoryPacket(player);
}
}
-
});
} catch (Exception e) {
- CatScheduler.runTask( () -> sender.sendMessage("§c数据库异常!"));
+ CatScheduler.runTask(() -> sender.sendMessage("§c数据库异常!"));
e.printStackTrace();
}
-
-
});
} else {
sender.sendMessage(Config.Language.RESETPASSWORD_EMAILCODE_INCORRECT);
}
-
} else {
sender.sendMessage(Config.Language.RESETPASSWORD_FAIL);
}
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/database/Cache.java b/src/main/java/cc/baka9/catseedlogin/bukkit/database/Cache.java
index 6403c80..b25cb47 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/database/Cache.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/database/Cache.java
@@ -4,7 +4,6 @@
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-
import cc.baka9.catseedlogin.bukkit.CatSeedLogin;
import cc.baka9.catseedlogin.bukkit.object.LoginPlayer;
@@ -12,17 +11,17 @@ public class Cache {
private static final Map PLAYER_HASHTABLE = new ConcurrentHashMap<>();
public static volatile boolean isLoaded = false;
- public static List getAllLoginPlayer(){
+ public static List getAllLoginPlayer() {
synchronized (PLAYER_HASHTABLE) {
return new ArrayList<>(PLAYER_HASHTABLE.values());
}
}
- public static LoginPlayer getIgnoreCase(String name){
+ public static LoginPlayer getIgnoreCase(String name) {
return PLAYER_HASHTABLE.get(name.toLowerCase());
}
- public static void refreshAll(){
+ public static void refreshAll() {
isLoaded = false;
CatSeedLogin.instance.runTaskAsync(() -> {
try {
@@ -40,7 +39,7 @@ public static void refreshAll(){
});
}
- public static void refresh(String name){
+ public static void refresh(String name) {
CatSeedLogin.instance.runTaskAsync(() -> {
try {
LoginPlayer newLp = CatSeedLogin.sql.get(name);
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/database/MySQL.java b/src/main/java/cc/baka9/catseedlogin/bukkit/database/MySQL.java
index 6140707..0e47968 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/database/MySQL.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/database/MySQL.java
@@ -3,9 +3,7 @@
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
-
import org.bukkit.plugin.java.JavaPlugin;
-
import cc.baka9.catseedlogin.bukkit.Config;
public class MySQL extends SQL {
@@ -20,12 +18,11 @@ public synchronized Connection getConnection() throws SQLException {
if (isConnectionValid()) {
return this.connection;
}
-
try {
Class.forName("com.mysql.cj.jdbc.Driver");
this.connection = DriverManager.getConnection(
- "jdbc:mysql://" + Config.MySQL.Host + ":" + Config.MySQL.Port + "/" + Config.MySQL.Database + "?characterEncoding=UTF-8",
- Config.MySQL.User, Config.MySQL.Password
+ "jdbc:mysql://" + Config.MySQL.Host + ":" + Config.MySQL.Port + "/" + Config.MySQL.Database + "?characterEncoding=UTF-8",
+ Config.MySQL.User, Config.MySQL.Password
);
return this.connection;
} catch (ClassNotFoundException | SQLException e) {
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/database/SQL.java b/src/main/java/cc/baka9/catseedlogin/bukkit/database/SQL.java
index b1a6a18..9b3a81f 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/database/SQL.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/database/SQL.java
@@ -13,54 +13,45 @@
public abstract class SQL {
protected JavaPlugin plugin;
- public SQL(JavaPlugin plugin){
+ public SQL(JavaPlugin plugin) {
this.plugin = plugin;
}
- public void init() throws Exception{
-
- flush(new BufferStatement("CREATE TABLE IF NOT EXISTS accounts (name CHAR(255),password CHAR(255),email CHAR(255),ips CHAR(255),lastAction TIMESTAMP)"));
+ public void init() throws Exception {
+ flush(new BufferStatement("CREATE TABLE IF NOT EXISTS accounts (name CHAR(255), password CHAR(255), email CHAR(255), ips CHAR(255), lastAction TIMESTAMP)"));
try {
flush(new BufferStatement("ALTER TABLE accounts ADD email CHAR(255)"));
} catch (Exception e) {
- if (!e.getMessage().toLowerCase().contains("duplicate column name")) {
- throw e;
- }
+ if (!e.getMessage().toLowerCase().contains("duplicate column name")) throw e;
}
try {
flush(new BufferStatement("ALTER TABLE accounts ADD ips CHAR(255)"));
} catch (Exception e) {
- if (!e.getMessage().toLowerCase().contains("duplicate column name")) {
- throw e;
- }
+ if (!e.getMessage().toLowerCase().contains("duplicate column name")) throw e;
}
-
}
-
- public void add(LoginPlayer lp) throws Exception{
- flush(new BufferStatement("INSERT INTO accounts (name,password,lastAction,email,ips) VALUES(?,?,?,?,?)",
- lp.getName(), lp.getPassword(), new Date(), lp.getEmail(), lp.getIps()));
+ public void add(LoginPlayer lp) throws Exception {
+ flush(new BufferStatement("INSERT INTO accounts (name, password, lastAction, email, ips) VALUES (?, ?, ?, ?, ?)",
+ lp.getName(), lp.getPassword(), new Date(), lp.getEmail(), lp.getIps()));
Cache.refresh(lp.getName());
}
- public void del(String name) throws Exception{
+ public void del(String name) throws Exception {
flush(new BufferStatement("DELETE FROM accounts WHERE name = ?", name));
Cache.refresh(name);
}
- public void edit(LoginPlayer lp) throws Exception{
- flush(new BufferStatement("UPDATE accounts SET password = ?, lastAction = ?, email = ?, ips = ? WHERE name= ?"
- , lp.getPassword(), new Date(), lp.getEmail(), lp.getIps(), lp.getName()));
+ public void edit(LoginPlayer lp) throws Exception {
+ flush(new BufferStatement("UPDATE accounts SET password = ?, lastAction = ?, email = ?, ips = ? WHERE name = ?",
+ lp.getPassword(), new Date(), lp.getEmail(), lp.getIps(), lp.getName()));
Cache.refresh(lp.getName());
}
- public LoginPlayer get(String name) throws Exception{
- PreparedStatement ps = new BufferStatement("SELECT * FROM accounts WHERE name = ?",
- name).prepareStatement(getConnection());
-
+ public LoginPlayer get(String name) throws Exception {
+ PreparedStatement ps = new BufferStatement("SELECT * FROM accounts WHERE name = ?", name).prepareStatement(getConnection());
ResultSet resultSet = ps.executeQuery();
LoginPlayer lp = null;
if (resultSet.next()) {
@@ -74,29 +65,26 @@ public LoginPlayer get(String name) throws Exception{
return lp;
}
- public List getAll() throws Exception{
+ public List getAll() throws Exception {
PreparedStatement ps = new BufferStatement("SELECT * FROM accounts").prepareStatement(getConnection());
ResultSet resultSet = ps.executeQuery();
List lps = new ArrayList<>();
- LoginPlayer lp;
while (resultSet.next()) {
- lp = new LoginPlayer(resultSet.getString("name"), resultSet.getString("password"));
+ LoginPlayer lp = new LoginPlayer(resultSet.getString("name"), resultSet.getString("password"));
lp.setLastAction(resultSet.getTimestamp("lastAction").getTime());
lp.setEmail(resultSet.getString("email"));
lp.setIps(resultSet.getString("ips"));
lps.add(lp);
}
return lps;
-
}
- public List getLikeByIp(String ip) throws Exception{
- PreparedStatement ps = new BufferStatement("SELECT * FROM accounts WHERE ips like ?", "%" + ip + "%").prepareStatement(getConnection());
+ public List getLikeByIp(String ip) throws Exception {
+ PreparedStatement ps = new BufferStatement("SELECT * FROM accounts WHERE ips LIKE ?", "%" + ip + "%").prepareStatement(getConnection());
ResultSet resultSet = ps.executeQuery();
List lps = new ArrayList<>();
- LoginPlayer lp;
while (resultSet.next()) {
- lp = new LoginPlayer(resultSet.getString("name"), resultSet.getString("password"));
+ LoginPlayer lp = new LoginPlayer(resultSet.getString("name"), resultSet.getString("password"));
lp.setLastAction(resultSet.getTimestamp("lastAction").getTime());
lp.setEmail(resultSet.getString("email"));
lp.setIps(resultSet.getString("ips"));
@@ -107,8 +95,7 @@ public List getLikeByIp(String ip) throws Exception{
public abstract Connection getConnection() throws Exception;
-
- public void flush(BufferStatement bufferStatement) throws Exception{
+ public void flush(BufferStatement bufferStatement) throws Exception {
PreparedStatement ps = bufferStatement.prepareStatement(getConnection());
ps.executeUpdate();
ps.close();
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/database/SQLite.java b/src/main/java/cc/baka9/catseedlogin/bukkit/database/SQLite.java
index 9a61c3e..f82fb84 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/database/SQLite.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/database/SQLite.java
@@ -3,7 +3,6 @@
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
-
import org.bukkit.plugin.java.JavaPlugin;
public class SQLite extends SQL {
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/event/CatSeedPlayerLoginEvent.java b/src/main/java/cc/baka9/catseedlogin/bukkit/event/CatSeedPlayerLoginEvent.java
index 96b101b..a23d043 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/event/CatSeedPlayerLoginEvent.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/event/CatSeedPlayerLoginEvent.java
@@ -9,39 +9,30 @@
public class CatSeedPlayerLoginEvent extends Event {
private static final HandlerList handlers = new HandlerList();
+ @Getter private final Player player;
+ private final String email;
+ @Getter private final Result result;
- public CatSeedPlayerLoginEvent(Player player, String email, Result result){
+ public CatSeedPlayerLoginEvent(Player player, String email, Result result) {
this.player = player;
this.email = email;
this.result = result;
}
- public HandlerList getHandlers(){
+ public HandlerList getHandlers() {
return handlers;
}
- public static HandlerList getHandlerList(){
+ public static HandlerList getHandlerList() {
return handlers;
}
- @Getter
- private final Player player;
- private final String email;
- @Getter
- private final Result result;
-
-
- public Optional getEmail(){
+ public Optional getEmail() {
return Optional.ofNullable(email);
}
-
public enum Result {
- SUCCESS,
- FAIL;
-
- Result(){
- }
-
+ SUCCESS, FAIL;
+ Result() {}
}
}
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/event/CatSeedPlayerRegisterEvent.java b/src/main/java/cc/baka9/catseedlogin/bukkit/event/CatSeedPlayerRegisterEvent.java
index 6d6a24f..8c3c1ac 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/event/CatSeedPlayerRegisterEvent.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/event/CatSeedPlayerRegisterEvent.java
@@ -5,25 +5,20 @@
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
-
@Getter
public class CatSeedPlayerRegisterEvent extends Event {
private static final HandlerList handlers = new HandlerList();
+ private final Player player;
- public HandlerList getHandlers(){
- return handlers;
+ public CatSeedPlayerRegisterEvent(Player player) {
+ this.player = player;
}
- public static HandlerList getHandlerList(){
+ public HandlerList getHandlers() {
return handlers;
}
- public CatSeedPlayerRegisterEvent(Player player){
- this.player = player;
+ public static HandlerList getHandlerList() {
+ return handlers;
}
-
-
- private final Player player;
-
-
}
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/object/EmailCode.java b/src/main/java/cc/baka9/catseedlogin/bukkit/object/EmailCode.java
index a185c1d..2897b07 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/object/EmailCode.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/object/EmailCode.java
@@ -3,7 +3,6 @@
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
-
import cc.baka9.catseedlogin.util.Util;
import lombok.Getter;
import lombok.Setter;
@@ -11,70 +10,40 @@
@Getter
@Setter
public class EmailCode {
-
- public enum Type {
- Bind, ResetPassword
- }
-
+ public enum Type { Bind, ResetPassword }
private static Map bindMap = new ConcurrentHashMap<>(10);
-
private static Map resetPasswordMap = new ConcurrentHashMap<>(10);
+ private String name, email, code;
+ private long durability, createTime;
- private String name;
- private String email;
- private String code;
- private long durability;
- private long createTime;
-
- private EmailCode(String name, String email, long durability){
- this.name = name;
- this.email = email;
- this.durability = durability;
- this.createTime = System.currentTimeMillis();
- this.code = Util.randomStr();
+ private EmailCode(String name, String email, long durability) {
+ this.name = name; this.email = email; this.durability = durability;
+ this.createTime = System.currentTimeMillis(); this.code = Util.randomStr();
}
- public static EmailCode create(String name, String email, long durability, Type type){
- if (type == Type.Bind) {
- bindMap.put(name, new EmailCode(name, email, durability));
- return bindMap.get(name);
- }
- if (type == Type.ResetPassword) {
-
- resetPasswordMap.put(name, new EmailCode(name, email, durability));
- return resetPasswordMap.get(name);
- }
- return null;
+ public static EmailCode create(String name, String email, long durability, Type type) {
+ EmailCode emailCode = new EmailCode(name, email, durability);
+ if (type == Type.Bind) bindMap.put(name, emailCode);
+ else if (type == Type.ResetPassword) resetPasswordMap.put(name, emailCode);
+ return emailCode;
}
- public static Optional getByName(String name, Type type){
+ public static Optional getByName(String name, Type type) {
clear();
- if (type == Type.Bind && bindMap.containsKey(name)) {
- return Optional.of(bindMap.get(name));
- }
- if (type == Type.ResetPassword && resetPasswordMap.containsKey(name)) {
- return Optional.of(resetPasswordMap.get(name));
- }
- return Optional.empty();
+ return (type == Type.Bind && bindMap.containsKey(name)) ? Optional.of(bindMap.get(name)) :
+ (type == Type.ResetPassword && resetPasswordMap.containsKey(name)) ? Optional.of(resetPasswordMap.get(name)) :
+ Optional.empty();
}
-
- public static void removeByName(String name, Type type){
+ public static void removeByName(String name, Type type) {
clear();
- if (type == Type.Bind) {
-
- bindMap.remove(name);
- }
- if (type == Type.ResetPassword) {
- resetPasswordMap.remove(name);
- }
-
+ if (type == Type.Bind) bindMap.remove(name);
+ else if (type == Type.ResetPassword) resetPasswordMap.remove(name);
}
- private static void clear(){
+ private static void clear() {
long now = System.currentTimeMillis();
bindMap.entrySet().removeIf(next -> now - next.getValue().getCreateTime() > next.getValue().getDurability());
resetPasswordMap.entrySet().removeIf(next -> now - next.getValue().getCreateTime() > next.getValue().getDurability());
}
-
}
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/object/LoginPlayer.java b/src/main/java/cc/baka9/catseedlogin/bukkit/object/LoginPlayer.java
index 290988d..67f96c2 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/object/LoginPlayer.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/object/LoginPlayer.java
@@ -14,41 +14,28 @@
@Getter
@Setter
public class LoginPlayer {
- private String name;
- private String password;
- private String email;
- private String ips;
+ private String name, password, email, ips;
private long lastAction;
- @Override
- public boolean equals(Object o){
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- LoginPlayer that = (LoginPlayer) o;
- return Objects.equals(name, that.name);
+ public LoginPlayer(String name, String password) {
+ this.name = name; this.password = password;
}
- public List getIpsList(){
- List ipList = new ArrayList<>();
- if (this.ips != null) {
- ipList.addAll(Arrays.asList(this.ips.split(";")));
- }
- return ipList;
+ @Override
+ public boolean equals(Object o) {
+ return this == o || (o instanceof LoginPlayer && Objects.equals(name, ((LoginPlayer) o).name));
}
@Override
- public int hashCode(){
+ public int hashCode() {
return Objects.hash(name);
}
- public LoginPlayer(String name, String password){
- this.name = name;
- this.password = password;
+ public List getIpsList() {
+ return (ips != null) ? new ArrayList<>(Arrays.asList(ips.split(";"))) : new ArrayList<>();
}
- public void crypt(){
+ public void crypt() {
password = Crypt.encrypt(name, password);
}
-
-
}
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/object/LoginPlayerHelper.java b/src/main/java/cc/baka9/catseedlogin/bukkit/object/LoginPlayerHelper.java
index deb769c..218d279 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/object/LoginPlayerHelper.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/object/LoginPlayerHelper.java
@@ -2,12 +2,7 @@
import java.net.InetAddress;
import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
@@ -31,45 +26,21 @@ public class LoginPlayerHelper {
private static final Set set = ConcurrentHashMap.newKeySet();
private static final Map playerExitTimes = new ConcurrentHashMap<>();
- public static List getList(){
- return new ArrayList<>(set);
+ public static List getList() { return new ArrayList<>(set); }
+ public static void add(LoginPlayer lp) { set.add(lp); }
+ public static void remove(LoginPlayer lp) { set.remove(lp); }
+
+ public static void remove(String name) {
+ set.removeIf(lp -> lp.getName().equals(name));
}
- public static void add(LoginPlayer lp){
- set.add(lp);
+ public static boolean isLogin(String name) {
+ return Config.Settings.BedrockLoginBypass && isFloodgatePlayer(name) ||
+ Config.Settings.LoginwiththesameIP && recordCurrentIP(name) ||
+ set.stream().anyMatch(lp -> lp.getName().equals(name));
}
- public static void remove(LoginPlayer lp){
- set.remove(lp);
- }
-
- public static void remove(String name){
- Iterator iterator = set.iterator();
- while (iterator.hasNext()) {
- LoginPlayer lp = iterator.next();
- if (lp.getName().equals(name)) {
- iterator.remove();
- break;
- }
- }
- }
-
- public static boolean isLogin(String name){
- if (Config.Settings.BedrockLoginBypass && isFloodgatePlayer(name)){
- return true;
- }
- if (Config.Settings.LoginwiththesameIP && recordCurrentIP(name)){
- return true;
- }
- for (LoginPlayer lp : set) {
- if (lp.getName().equals(name)) {
- return true;
- }
- }
- return false;
- }
-
- public static boolean isRegister(String name){
+ public static boolean isRegister(String name) {
return Config.Settings.BedrockLoginBypass && isFloodgatePlayer(name) || Cache.getIgnoreCase(name) != null;
}
@@ -79,32 +50,17 @@ public static boolean recordCurrentIP(String name) {
}
public static boolean recordCurrentIP(Player player) {
- String currentIP = (player.getAddress() != null) ? player.getAddress().getAddress().getHostAddress() : null;
-
- if (currentIP == null) {
- return false;
- }
+ String currentIP = Optional.ofNullable(player.getAddress()).map(addr -> addr.getAddress().getHostAddress()).orElse(null);
+ if (currentIP == null) return false;
LoginPlayer storedPlayer = Cache.getIgnoreCase(player.getName());
-
if (storedPlayer != null) {
List storedIPs = getStoredIPs(storedPlayer);
Long exitTime = playerExitTimes.get(player.getName());
- try {
- if (InetAddress.getByName(currentIP).isLoopbackAddress()) {
- return false;
- }
- } catch (UnknownHostException e) {
- return false;
- }
-
- if (Config.Settings.IPTimeout == 0) {
- return storedIPs.contains(currentIP);
- } else {
- return exitTime != null && storedIPs.contains(currentIP) &&
- (System.currentTimeMillis() - exitTime) <= (long) Config.Settings.IPTimeout * 60 * 1000L;
- }
+ if (isLoopbackAddress(currentIP)) return false;
+ return Config.Settings.IPTimeout == 0 ? storedIPs.contains(currentIP) :
+ exitTime != null && storedIPs.contains(currentIP) && (System.currentTimeMillis() - exitTime) <= (long) Config.Settings.IPTimeout * 60 * 1000L;
}
return false;
@@ -121,13 +77,7 @@ public void onPlayerQuit(String playerName) {
}
public static List getStoredIPs(LoginPlayer lp) {
- List storedIPs = new ArrayList<>();
- String ipsString = lp.getIps();
- if (ipsString != null) {
- String[] ipsArray = ipsString.split(";");
- storedIPs.addAll(Arrays.asList(ipsArray));
- }
- return storedIPs;
+ return (lp.getIps() != null) ? new ArrayList<>(Arrays.asList(lp.getIps().split(";"))) : new ArrayList<>();
}
public static boolean isFloodgatePlayer(String name) {
@@ -136,8 +86,7 @@ public static boolean isFloodgatePlayer(String name) {
}
public static boolean isFloodgatePlayer(Player player) {
- return Bukkit.getPluginManager().getPlugin("floodgate") != null &&
- FloodgateApi.getInstance().isFloodgatePlayer(player.getUniqueId());
+ return Bukkit.getPluginManager().getPlugin("floodgate") != null && FloodgateApi.getInstance().isFloodgatePlayer(player.getUniqueId());
}
public static Long getLastLoginTime(String name) {
@@ -145,15 +94,12 @@ public static Long getLastLoginTime(String name) {
return (loginPlayer != null) ? loginPlayer.getLastAction() : null;
}
- // 记录登录IP
- public static void recordCurrentIP(Player player, LoginPlayer lp){
+ public static void recordCurrentIP(Player player, LoginPlayer lp) {
String currentIp = player.getAddress().getAddress().getHostAddress();
List ipsList = lp.getIpsList();
- ipsList.add(currentIp);
ipsList = ipsList.stream().distinct().collect(Collectors.toList());
- if (!ipsList.isEmpty()) {
- ipsList.remove(0);
- }
+ if (!ipsList.isEmpty()) ipsList.remove(0);
+ ipsList.add(currentIp);
lp.setIps(String.join(";", ipsList));
CatSeedLogin.instance.runTaskAsync(() -> {
try {
@@ -164,18 +110,15 @@ public static void recordCurrentIP(Player player, LoginPlayer lp){
});
}
- // ProtocolLib发包空背包
public static void sendBlankInventoryPacket(Player player) {
if (!Config.Settings.Emptybackpack) return;
ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
PacketContainer inventoryPacket = protocolManager.createPacket(PacketType.Play.Server.WINDOW_ITEMS);
inventoryPacket.getIntegers().write(0, 0);
-
- int inventorySize = 45;
- ItemStack[] blankInventory = new ItemStack[inventorySize];
+ ItemStack[] blankInventory = new ItemStack[45];
Arrays.fill(blankInventory, new ItemStack(Material.AIR));
-
+
StructureModifier itemArrayModifier = inventoryPacket.getItemArrayModifier();
if (itemArrayModifier.size() > 0) {
itemArrayModifier.write(0, blankInventory);
@@ -186,4 +129,12 @@ public static void sendBlankInventoryPacket(Player player) {
protocolManager.sendServerPacket(player, inventoryPacket, false);
}
+
+ private static boolean isLoopbackAddress(String currentIP) {
+ try {
+ return InetAddress.getByName(currentIP).isLoopbackAddress();
+ } catch (UnknownHostException e) {
+ return false;
+ }
+ }
}
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/task/Task.java b/src/main/java/cc/baka9/catseedlogin/bukkit/task/Task.java
index 61a6ea8..47a0f72 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/task/Task.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/task/Task.java
@@ -2,7 +2,6 @@
import java.util.ArrayList;
import java.util.List;
-
import cc.baka9.catseedlogin.bukkit.CatScheduler;
import cc.baka9.catseedlogin.bukkit.CatSeedLogin;
import space.arim.morepaperlib.scheduling.ScheduledTask;
@@ -10,24 +9,17 @@
public abstract class Task implements Runnable {
private static final List scheduledTasks = new ArrayList<>();
private static final CatSeedLogin plugin = CatSeedLogin.instance;
-
private static TaskAutoKick taskAutoKick;
private static TaskSendLoginMessage taskSendLoginMessage;
protected Task() {}
public static TaskAutoKick getTaskAutoKick() {
- if (taskAutoKick == null) {
- taskAutoKick = new TaskAutoKick();
- }
- return taskAutoKick;
+ return taskAutoKick == null ? (taskAutoKick = new TaskAutoKick()) : taskAutoKick;
}
public static TaskSendLoginMessage getTaskSendLoginMessage() {
- if (taskSendLoginMessage == null) {
- taskSendLoginMessage = new TaskSendLoginMessage();
- }
- return taskSendLoginMessage;
+ return taskSendLoginMessage == null ? (taskSendLoginMessage = new TaskSendLoginMessage()) : taskSendLoginMessage;
}
public static void runAll() {
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/task/TaskAutoKick.java b/src/main/java/cc/baka9/catseedlogin/bukkit/task/TaskAutoKick.java
index 5fd9dce..ffae09d 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/task/TaskAutoKick.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/task/TaskAutoKick.java
@@ -2,10 +2,8 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
-
import cc.baka9.catseedlogin.bukkit.Config;
import cc.baka9.catseedlogin.bukkit.database.Cache;
import cc.baka9.catseedlogin.bukkit.object.LoginPlayerHelper;
@@ -17,9 +15,7 @@ public class TaskAutoKick extends Task {
public void run() {
if (!Cache.isLoaded || Config.Settings.AutoKick < 1) return;
- long autoKickMs = Config.Settings.AutoKick * 1000L;
- long now = System.currentTimeMillis();
-
+ long autoKickMs = Config.Settings.AutoKick * 1000L, now = System.currentTimeMillis();
for (Player player : Bukkit.getOnlinePlayers()) {
String playerName = player.getName();
try {
@@ -32,7 +28,6 @@ public void run() {
playerJoinTime.remove(playerName);
}
} catch (Exception e) {
- // 记录错误日志
e.printStackTrace();
}
}
diff --git a/src/main/java/cc/baka9/catseedlogin/bukkit/task/TaskSendLoginMessage.java b/src/main/java/cc/baka9/catseedlogin/bukkit/task/TaskSendLoginMessage.java
index 44d95e4..55e8154 100644
--- a/src/main/java/cc/baka9/catseedlogin/bukkit/task/TaskSendLoginMessage.java
+++ b/src/main/java/cc/baka9/catseedlogin/bukkit/task/TaskSendLoginMessage.java
@@ -2,13 +2,11 @@
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
-
import cc.baka9.catseedlogin.bukkit.Config;
import cc.baka9.catseedlogin.bukkit.database.Cache;
import cc.baka9.catseedlogin.bukkit.object.LoginPlayerHelper;
public class TaskSendLoginMessage extends Task {
-
@Override
public void run() {
if (!Cache.isLoaded) return;
@@ -17,14 +15,9 @@ public void run() {
try {
String playerName = player.getName();
if (!LoginPlayerHelper.isLogin(playerName)) {
- if (!LoginPlayerHelper.isRegister(playerName)) {
- player.sendMessage(Config.Language.REGISTER_REQUEST);
- } else {
- player.sendMessage(Config.Language.LOGIN_REQUEST);
- }
+ player.sendMessage(LoginPlayerHelper.isRegister(playerName) ? Config.Language.LOGIN_REQUEST : Config.Language.REGISTER_REQUEST);
}
} catch (Exception e) {
- // 记录错误日志
e.printStackTrace();
}
}
diff --git a/src/main/java/cc/baka9/catseedlogin/bungee/Communication.java b/src/main/java/cc/baka9/catseedlogin/bungee/Communication.java
index e0818b6..05e7bbf 100644
--- a/src/main/java/cc/baka9/catseedlogin/bungee/Communication.java
+++ b/src/main/java/cc/baka9/catseedlogin/bungee/Communication.java
@@ -1,47 +1,70 @@
package cc.baka9.catseedlogin.bungee;
-import java.net.Socket;
-import java.io.IOException;
+import cc.baka9.catseedlogin.util.CommunicationAuth;
+import net.md_5.bungee.api.ProxyServer;
+
import java.io.BufferedWriter;
+import java.io.IOException;
import java.io.OutputStreamWriter;
-
-import cc.baka9.catseedlogin.util.CommunicationAuth;
+import java.net.Socket;
/**
* bc 与 bukkit 的通讯交流
*/
public class Communication {
- private static final String HOST = Config.Host;
- private static final int PORT = Config.Port;
public static int sendConnectRequest(String playerName) {
- return sendRequest("Connect", playerName);
+ try (Socket socket = getSocket(); BufferedWriter bufferedWriter = getSocketBufferedWriter(socket)) {
+ // 请求类型
+ bufferedWriter.write("Connect");
+ bufferedWriter.newLine();
+ // 玩家名
+ bufferedWriter.write(playerName);
+ bufferedWriter.newLine();
+
+ bufferedWriter.flush();
+ return socket.getInputStream().read();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return 0;
}
public static void sendKeepLoggedInRequest(String playerName) {
- long currentTime = System.currentTimeMillis();
- String time = String.valueOf(currentTime);
- String sign = CommunicationAuth.encryption(playerName, time, Config.AuthKey);
- sendRequest("KeepLoggedIn", playerName, time, sign);
- }
+ try (Socket socket = getSocket(); BufferedWriter bufferedWriter = getSocketBufferedWriter(socket)) {
+ // 请求类型
+ bufferedWriter.write("KeepLoggedIn");
+ bufferedWriter.newLine();
+ // 玩家名
+ bufferedWriter.write(playerName);
+ bufferedWriter.newLine();
+ // 时间戳
+ String time = String.valueOf(System.currentTimeMillis());
+ bufferedWriter.write(time);
+ bufferedWriter.newLine();
+ // 根据玩家名,时间戳,和authKey加密的结果(加密是因为如果登录服不在内网环境下,则可能会被人使用这个功能给发包来绕过登录)
+ String sign = CommunicationAuth.encryption(playerName, time, Config.AuthKey);
+ bufferedWriter.write(sign);
+ bufferedWriter.newLine();
- private static int sendRequest(String requestType, String... messages) {
- try (Socket socket = new Socket(HOST, PORT);
- BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))) {
- writeMessage(writer, requestType, messages);
- return socket.getInputStream().read();
+ bufferedWriter.flush();
} catch (IOException e) {
- return 0;
+ e.printStackTrace();
}
}
- private static void writeMessage(BufferedWriter writer, String requestType, String... messages) throws IOException {
- writer.write(requestType);
- writer.newLine();
- for (String message : messages) {
- writer.write(message);
- writer.newLine();
+ private static Socket getSocket() throws IOException {
+ try {
+ return new Socket(Config.Host, Config.Port);
+ } catch (IOException e) {
+ ProxyServer.getInstance().getLogger().warning("§c请检查装载登录插件的子服是否在 bungeecord.yml 中开启了bungeecord功能,以及Host和Port是否与bc端的配置相同");
+ throw new IOException(e);
}
- writer.flush();
}
+
+ private static BufferedWriter getSocketBufferedWriter(Socket socket) throws IOException {
+ return new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
+ }
+
+
}
diff --git a/src/main/java/cc/baka9/catseedlogin/util/CommunicationAuth.java b/src/main/java/cc/baka9/catseedlogin/util/CommunicationAuth.java
index d27fcb9..5461ae0 100644
--- a/src/main/java/cc/baka9/catseedlogin/util/CommunicationAuth.java
+++ b/src/main/java/cc/baka9/catseedlogin/util/CommunicationAuth.java
@@ -4,7 +4,6 @@
import java.security.NoSuchAlgorithmException;
public class CommunicationAuth {
-
private static final MessageDigest messageDigest;
static {
diff --git a/src/main/java/cc/baka9/catseedlogin/util/Crypt.java b/src/main/java/cc/baka9/catseedlogin/util/Crypt.java
index f0a5c3d..ab5709b 100644
--- a/src/main/java/cc/baka9/catseedlogin/util/Crypt.java
+++ b/src/main/java/cc/baka9/catseedlogin/util/Crypt.java
@@ -5,10 +5,9 @@
import java.security.NoSuchAlgorithmException;
public class Crypt {
-
private static final char[] CRYPTCHARS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
- public static String encrypt(final String name, final String password){
+ public static String encrypt(final String name, final String password) {
String text = "ÜÄaeut//&/=I " + password + "7421€547" + name + "__+IÄIH§%NK " + password;
try {
final MessageDigest md = MessageDigest.getInstance("SHA-512");
@@ -19,7 +18,7 @@ public static String encrypt(final String name, final String password){
}
}
- public static String byteArrayToHexString(byte[] args){
+ public static String byteArrayToHexString(byte[] args) {
char[] chars = new char[args.length * 2];
for (int i = 0; i < args.length; i++) {
chars[(i * 2)] = CRYPTCHARS[(args[i] >> 4 & 0xF)];
@@ -28,12 +27,11 @@ public static String byteArrayToHexString(byte[] args){
return new String(chars);
}
- public boolean match(final String name, final String password, final String encrypted){
+ public boolean match(final String name, final String password, final String encrypted) {
try {
return encrypted.equals(encrypt(name, password));
} catch (final Exception e) {
return false;
}
}
-
}
diff --git a/src/main/java/cc/baka9/catseedlogin/util/Mail.java b/src/main/java/cc/baka9/catseedlogin/util/Mail.java
index d94a7a2..d509d78 100644
--- a/src/main/java/cc/baka9/catseedlogin/util/Mail.java
+++ b/src/main/java/cc/baka9/catseedlogin/util/Mail.java
@@ -3,16 +3,12 @@
import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.Email;
import org.apache.commons.mail.HtmlEmail;
-
import cc.baka9.catseedlogin.bukkit.Config;
public class Mail {
-
- private Mail() {
- }
+ private Mail() {}
public static void sendMail(String receiveMailAccount, String subject, String content) throws Exception {
-
Email email = new HtmlEmail();
email.setHostName(Config.EmailVerify.EmailSmtpHost);
email.setSmtpPort(Integer.parseInt(Config.EmailVerify.EmailSmtpPort));
@@ -29,7 +25,5 @@ public static void sendMail(String receiveMailAccount, String subject, String co
email.addTo(receiveMailAccount);
email.setCharset("UTF-8");
email.send();
-
}
-
}
diff --git a/src/main/java/cc/baka9/catseedlogin/util/Util.java b/src/main/java/cc/baka9/catseedlogin/util/Util.java
index f376092..c349dff 100644
--- a/src/main/java/cc/baka9/catseedlogin/util/Util.java
+++ b/src/main/java/cc/baka9/catseedlogin/util/Util.java
@@ -5,7 +5,6 @@
import java.util.Date;
import java.util.Random;
import java.util.regex.Pattern;
-
import org.apache.commons.lang3.RandomStringUtils;
public class Util {
@@ -32,7 +31,6 @@ public static String randomStr() {
}
public static boolean isOSLinux() {
- String os = System.getProperty("os.name");
- return os != null && os.toLowerCase().contains("linux");
+ return System.getProperty("os.name").toLowerCase().contains("linux");
}
}