From da9271b283ea14cdb04b22a3193e9c510a896d0f Mon Sep 17 00:00:00 2001 From: loki5512344 Date: Sun, 12 Jul 2026 00:59:21 +0200 Subject: [PATCH] chore: unify checkstyle, fix violations, cleanup bin/ --- build.gradle.kts | 17 ++++ .../loki/loAuth/common/cfg/YamlConfig.java | 4 +- .../loAuth/common/db/DatabaseManager.java | 42 ++++++--- .../common/exception/DatabaseException.java | 4 +- .../exception/DuplicateUserException.java | 4 +- .../loAuth/common/util/CodeGenerator.java | 6 +- config/checkstyle/checkstyle.xml | 89 +++++++++++++++++++ .../dev/loki/loAuth/discord/BotLauncher.java | 6 +- .../loki/loAuth/discord/auth/AuthService.java | 11 ++- .../dev/loki/loAuth/discord/cfg/BotCfg.java | 53 +++++++++-- .../listener/LoginReactionListener.java | 8 +- .../discord/listener/VerifyListener.java | 12 ++- gradlew | 0 .../java/dev/loki/loAuth/plugin/FoxAuth.java | 65 +++++++++++--- .../loki/loAuth/plugin/cfg/MessageConfig.java | 38 ++++++-- .../dev/loki/loAuth/plugin/cfg/PluginCfg.java | 61 ++++++++++--- .../loAuth/plugin/listener/LoginListener.java | 10 ++- 17 files changed, 363 insertions(+), 67 deletions(-) create mode 100644 config/checkstyle/checkstyle.xml mode change 100644 => 100755 gradlew diff --git a/build.gradle.kts b/build.gradle.kts index 204353a..ed8aa17 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,7 @@ plugins { java id("com.gradleup.shadow") version "9.3.1" apply false + checkstyle } allprojects { @@ -18,8 +19,24 @@ allprojects { subprojects { apply(plugin = "java") + apply(plugin = "checkstyle") java { toolchain.languageVersion.set(JavaLanguageVersion.of(21)) } + + checkstyle { + toolVersion = "10.21.4" + configFile = rootProject.file("config/checkstyle/checkstyle.xml") + isIgnoreFailures = false + maxErrors = 0 + maxWarnings = 0 + } + + tasks.withType().configureEach { + reports { + xml.required.set(true) + html.required.set(true) + } + } } diff --git a/common/src/main/java/dev/loki/loAuth/common/cfg/YamlConfig.java b/common/src/main/java/dev/loki/loAuth/common/cfg/YamlConfig.java index 648fb49..54cb834 100644 --- a/common/src/main/java/dev/loki/loAuth/common/cfg/YamlConfig.java +++ b/common/src/main/java/dev/loki/loAuth/common/cfg/YamlConfig.java @@ -40,7 +40,9 @@ public final class YamlConfig { @SuppressWarnings("unchecked") public T get(final String key, final T defaultValue) { Object val = data.get(key); - if (val == null) return defaultValue; + if (val == null) { + return defaultValue; + } try { return (T) val; } catch (ClassCastException e) { diff --git a/common/src/main/java/dev/loki/loAuth/common/db/DatabaseManager.java b/common/src/main/java/dev/loki/loAuth/common/db/DatabaseManager.java index cb59e75..ebe5aa4 100644 --- a/common/src/main/java/dev/loki/loAuth/common/db/DatabaseManager.java +++ b/common/src/main/java/dev/loki/loAuth/common/db/DatabaseManager.java @@ -8,7 +8,11 @@ import dev.loki.loAuth.common.util.CodeGenerator; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; -import java.sql.*; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; import java.time.Instant; import java.util.ArrayList; import java.util.List; @@ -159,7 +163,9 @@ public final class DatabaseManager implements AutoCloseable { throw new SQLException("INSERT returned no rows"); } else { try (ResultSet rs = ps.executeQuery()) { - if (rs.next()) return mapUser(rs); + if (rs.next()) { + return mapUser(rs); + } throw new SQLException("INSERT returned no rows"); } } @@ -240,7 +246,9 @@ public final class DatabaseManager implements AutoCloseable { } public Optional consumeVerificationCode(final String code) { - if (sqlite) return consumeDeleteSelect("pending_verifications", "code", code); + if (sqlite) { + return consumeDeleteSelect("pending_verifications", "code", code); + } try (Connection conn = ds.getConnection(); PreparedStatement ps = conn.prepareStatement(""" DELETE FROM pending_verifications @@ -309,7 +317,9 @@ public final class DatabaseManager implements AutoCloseable { } public Optional consumeLoginToken(final String token) { - if (sqlite) return consumeDeleteSelect("pending_logins", "token", token); + if (sqlite) { + return consumeDeleteSelect("pending_logins", "token", token); + } try (Connection conn = ds.getConnection(); PreparedStatement ps = conn.prepareStatement(""" DELETE FROM pending_logins @@ -327,7 +337,9 @@ public final class DatabaseManager implements AutoCloseable { } public Optional consumeLoginTokenByMessageId(final String messageId) { - if (sqlite) return consumeDeleteSelect("pending_logins", "message_id", messageId); + if (sqlite) { + return consumeDeleteSelect("pending_logins", "message_id", messageId); + } try (Connection conn = ds.getConnection(); PreparedStatement ps = conn.prepareStatement(""" DELETE FROM pending_logins @@ -378,7 +390,9 @@ public final class DatabaseManager implements AutoCloseable { "SELECT minecraft_nick FROM pending_logins WHERE expires_at <= ?")) { ps.setLong(1, now); try (ResultSet rs = ps.executeQuery()) { - while (rs.next()) nicks.add(rs.getString("minecraft_nick")); + while (rs.next()) { + nicks.add(rs.getString("minecraft_nick")); + } } } if (!nicks.isEmpty()) { @@ -399,7 +413,9 @@ public final class DatabaseManager implements AutoCloseable { "DELETE FROM pending_logins WHERE expires_at <= ? RETURNING minecraft_nick")) { ps.setLong(1, now); try (ResultSet rs = ps.executeQuery()) { - while (rs.next()) nicks.add(rs.getString("minecraft_nick")); + while (rs.next()) { + nicks.add(rs.getString("minecraft_nick")); + } } } catch (SQLException e) { throw new DatabaseException("Failed to pop expired logins", e); @@ -456,23 +472,27 @@ public final class DatabaseManager implements AutoCloseable { } private static void validateNick(final String nick) { - if (nick == null || !nick.matches("^[a-zA-Z0-9_]{3,16}$")) + if (nick == null || !nick.matches("^[a-zA-Z0-9_]{3,16}$")) { throw new IllegalArgumentException("Invalid Minecraft nick: " + nick); + } } private static void validateDiscordId(final String id) { - if (id == null || !id.matches("^[0-9]{17,20}$")) + if (id == null || !id.matches("^[0-9]{17,20}$")) { throw new IllegalArgumentException("Invalid Discord ID: " + id); + } } private static RuntimeException translateSqlException(final SQLException e) { String state = e.getSQLState(); if ("23505".equals(state) || "23000".equals(state)) { String msg = e.getMessage(); - if (msg != null && (msg.contains("minecraft_nick") || msg.contains("UNIQUE constraint failed: users.minecraft_nick"))) + if (msg != null && (msg.contains("minecraft_nick") || msg.contains("UNIQUE constraint failed: users.minecraft_nick"))) { return new DuplicateUserException("Minecraft nick already registered"); - if (msg != null && (msg.contains("discord_id") || msg.contains("UNIQUE constraint failed: users.discord_id"))) + } + if (msg != null && (msg.contains("discord_id") || msg.contains("UNIQUE constraint failed: users.discord_id"))) { return new DuplicateUserException("Discord ID already registered"); + } return new DuplicateUserException("Duplicate entry"); } return new DatabaseException("Database error", e); diff --git a/common/src/main/java/dev/loki/loAuth/common/exception/DatabaseException.java b/common/src/main/java/dev/loki/loAuth/common/exception/DatabaseException.java index e9a3a20..690e529 100644 --- a/common/src/main/java/dev/loki/loAuth/common/exception/DatabaseException.java +++ b/common/src/main/java/dev/loki/loAuth/common/exception/DatabaseException.java @@ -1,5 +1,7 @@ package dev.loki.loAuth.common.exception; public final class DatabaseException extends RuntimeException { - public DatabaseException(String msg, Throwable cause) { super(msg, cause); } + public DatabaseException(String msg, Throwable cause) { + super(msg, cause); + } } \ No newline at end of file diff --git a/common/src/main/java/dev/loki/loAuth/common/exception/DuplicateUserException.java b/common/src/main/java/dev/loki/loAuth/common/exception/DuplicateUserException.java index 05f0702..ff03bfa 100644 --- a/common/src/main/java/dev/loki/loAuth/common/exception/DuplicateUserException.java +++ b/common/src/main/java/dev/loki/loAuth/common/exception/DuplicateUserException.java @@ -1,5 +1,7 @@ package dev.loki.loAuth.common.exception; public final class DuplicateUserException extends RuntimeException { - public DuplicateUserException(String msg) { super(msg); } + public DuplicateUserException(String msg) { + super(msg); + } } \ No newline at end of file diff --git a/common/src/main/java/dev/loki/loAuth/common/util/CodeGenerator.java b/common/src/main/java/dev/loki/loAuth/common/util/CodeGenerator.java index c354813..928c910 100644 --- a/common/src/main/java/dev/loki/loAuth/common/util/CodeGenerator.java +++ b/common/src/main/java/dev/loki/loAuth/common/util/CodeGenerator.java @@ -10,12 +10,14 @@ public final class CodeGenerator { private CodeGenerator() {} public static String generate(final int length) { - if (length < 4 || length > 16) + if (length < 4 || length > 16) { throw new IllegalArgumentException("Code length must be between 4 and 16"); + } StringBuilder sb = new StringBuilder(length); - for (int i = 0; i < length; i++) + for (int i = 0; i < length; i++) { sb.append(ALPHABET.charAt(RNG.nextInt(ALPHABET.length()))); + } return sb.toString(); } } diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml new file mode 100644 index 0000000..a3a9089 --- /dev/null +++ b/config/checkstyle/checkstyle.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/discord/src/main/java/dev/loki/loAuth/discord/BotLauncher.java b/discord/src/main/java/dev/loki/loAuth/discord/BotLauncher.java index 9bc3f1e..cdff10b 100644 --- a/discord/src/main/java/dev/loki/loAuth/discord/BotLauncher.java +++ b/discord/src/main/java/dev/loki/loAuth/discord/BotLauncher.java @@ -11,6 +11,8 @@ import java.nio.file.Path; public final class BotLauncher { + private BotLauncher() {} + private static final Logger log = LoggerFactory.getLogger(BotLauncher.class); public static void main(final String[] args) { @@ -33,7 +35,9 @@ public final class BotLauncher { Path path = Path.of(System.getProperty("user.dir")).resolve(fileName); if (Files.notExists(path)) { try (InputStream in = BotLauncher.class.getResourceAsStream("/" + fileName)) { - if (in == null) throw new IOException("Resource not found: " + fileName); + if (in == null) { + throw new IOException("Resource not found: " + fileName); + } Files.copy(in, path); } } diff --git a/discord/src/main/java/dev/loki/loAuth/discord/auth/AuthService.java b/discord/src/main/java/dev/loki/loAuth/discord/auth/AuthService.java index 3a3621b..df4f00f 100644 --- a/discord/src/main/java/dev/loki/loAuth/discord/auth/AuthService.java +++ b/discord/src/main/java/dev/loki/loAuth/discord/auth/AuthService.java @@ -9,7 +9,9 @@ import org.slf4j.LoggerFactory; import java.util.List; import java.util.Optional; -import java.util.concurrent.*; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; public final class AuthService implements AutoCloseable { @@ -36,7 +38,9 @@ public final class AuthService implements AutoCloseable { public void verifyNewUser(final String code, final String discordId) { Optional nick = db.consumeVerificationCode(code.toUpperCase()); - if (nick.isEmpty()) throw new IllegalArgumentException("Invalid or expired code: " + code); + if (nick.isEmpty()) { + throw new IllegalArgumentException("Invalid or expired code: " + code); + } db.addUser(nick.get(), discordId); log.info("New user registered: {} -> {}", nick.get(), discordId); } @@ -75,8 +79,9 @@ public final class AuthService implements AutoCloseable { private void kickExpiredLogins() { try { List expired = db.popExpiredLogins(); - if (!expired.isEmpty()) + if (!expired.isEmpty()) { log.info("Expired logins cleaned up: {}", expired); + } } catch (Exception e) { log.error("Error during expired login cleanup", e); } diff --git a/discord/src/main/java/dev/loki/loAuth/discord/cfg/BotCfg.java b/discord/src/main/java/dev/loki/loAuth/discord/cfg/BotCfg.java index bfdf90f..f458c9a 100644 --- a/discord/src/main/java/dev/loki/loAuth/discord/cfg/BotCfg.java +++ b/discord/src/main/java/dev/loki/loAuth/discord/cfg/BotCfg.java @@ -13,13 +13,48 @@ public final class BotCfg implements BotConfig { cfg = new YamlConfig(configPath); } - @Override public String getToken() { return cfg.getRequired("token", String.class); } - @Override public String getDbType() { return cfg.getRequired("db_type", String.class); } - @Override public String getDbHost() { return cfg.getRequired("db_host", String.class); } - @Override public int getDbPort() { return cfg.getRequired("db_port", Integer.class); } - @Override public String getDbName() { return cfg.getRequired("db_name", String.class); } - @Override public String getDbUser() { return cfg.getRequired("db_user", String.class); } - @Override public String getDbPassword() { return cfg.getRequired("db_password", String.class); } - @Override public int getAuthTimeoutSeconds() { return cfg.getRequired("auth_timeout_seconds", Integer.class); } - @Override public int getVerificationCodeLength() { return cfg.getRequired("verification_code_length",Integer.class); } + @Override + public String getToken() { + return cfg.getRequired("token", String.class); + } + + @Override + public String getDbType() { + return cfg.getRequired("db_type", String.class); + } + + @Override + public String getDbHost() { + return cfg.getRequired("db_host", String.class); + } + + @Override + public int getDbPort() { + return cfg.getRequired("db_port", Integer.class); + } + + @Override + public String getDbName() { + return cfg.getRequired("db_name", String.class); + } + + @Override + public String getDbUser() { + return cfg.getRequired("db_user", String.class); + } + + @Override + public String getDbPassword() { + return cfg.getRequired("db_password", String.class); + } + + @Override + public int getAuthTimeoutSeconds() { + return cfg.getRequired("auth_timeout_seconds", Integer.class); + } + + @Override + public int getVerificationCodeLength() { + return cfg.getRequired("verification_code_length", Integer.class); + } } diff --git a/discord/src/main/java/dev/loki/loAuth/discord/listener/LoginReactionListener.java b/discord/src/main/java/dev/loki/loAuth/discord/listener/LoginReactionListener.java index 635b316..8fe19de 100644 --- a/discord/src/main/java/dev/loki/loAuth/discord/listener/LoginReactionListener.java +++ b/discord/src/main/java/dev/loki/loAuth/discord/listener/LoginReactionListener.java @@ -19,8 +19,12 @@ public final class LoginReactionListener extends ListenerAdapter { @Override public void onMessageReactionAdd(final MessageReactionAddEvent event) { - if (event.getUser() == null || event.getUser().isBot()) return; - if (!CHECKMARK.equals(event.getReaction().getEmoji().getName())) return; + if (event.getUser() == null || event.getUser().isBot()) { + return; + } + if (!CHECKMARK.equals(event.getReaction().getEmoji().getName())) { + return; + } // Ищем токен по message_id — бот сохранил его при отправке db.consumeLoginTokenByMessageId(event.getMessageId()).ifPresent(nick -> diff --git a/discord/src/main/java/dev/loki/loAuth/discord/listener/VerifyListener.java b/discord/src/main/java/dev/loki/loAuth/discord/listener/VerifyListener.java index 38fc357..0174d02 100644 --- a/discord/src/main/java/dev/loki/loAuth/discord/listener/VerifyListener.java +++ b/discord/src/main/java/dev/loki/loAuth/discord/listener/VerifyListener.java @@ -18,11 +18,17 @@ public final class VerifyListener extends ListenerAdapter { @Override public void onMessageReceived(final MessageReceivedEvent event) { - if (event.getAuthor().isBot()) return; - if (!event.isFromType(ChannelType.PRIVATE)) return; + if (event.getAuthor().isBot()) { + return; + } + if (!event.isFromType(ChannelType.PRIVATE)) { + return; + } String content = event.getMessage().getContentRaw().trim(); - if (!content.toUpperCase().startsWith(COMMAND)) return; + if (!content.toUpperCase().startsWith(COMMAND)) { + return; + } String[] parts = content.split("\\s+", 2); if (parts.length < 2) { diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/plugin/src/main/java/dev/loki/loAuth/plugin/FoxAuth.java b/plugin/src/main/java/dev/loki/loAuth/plugin/FoxAuth.java index 544fc56..6da160f 100644 --- a/plugin/src/main/java/dev/loki/loAuth/plugin/FoxAuth.java +++ b/plugin/src/main/java/dev/loki/loAuth/plugin/FoxAuth.java @@ -68,15 +68,50 @@ public final class FoxAuth { try { discordBot = new Bot(new BotConfig() { - @Override public String getDbType() { return cfg.getDbType(); } - @Override public String getToken() { return token; } - @Override public String getDbHost() { return cfg.getDbHost(); } - @Override public int getDbPort() { return cfg.getDbPort(); } - @Override public String getDbName() { return cfg.getDbName(); } - @Override public String getDbUser() { return cfg.getDbUser(); } - @Override public String getDbPassword() { return cfg.getDbPassword(); } - @Override public int getAuthTimeoutSeconds() { return cfg.getAuthTimeoutSeconds(); } - @Override public int getVerificationCodeLength() { return cfg.getVerificationCodeLength(); } + @Override + public String getDbType() { + return cfg.getDbType(); + } + + @Override + public String getToken() { + return token; + } + + @Override + public String getDbHost() { + return cfg.getDbHost(); + } + + @Override + public int getDbPort() { + return cfg.getDbPort(); + } + + @Override + public String getDbName() { + return cfg.getDbName(); + } + + @Override + public String getDbUser() { + return cfg.getDbUser(); + } + + @Override + public String getDbPassword() { + return cfg.getDbPassword(); + } + + @Override + public int getAuthTimeoutSeconds() { + return cfg.getAuthTimeoutSeconds(); + } + + @Override + public int getVerificationCodeLength() { + return cfg.getVerificationCodeLength(); + } }); log.info("Discord bot started in embedded mode."); } catch (Exception e) { @@ -86,8 +121,12 @@ public final class FoxAuth { @Subscribe public void onShutdown(final ProxyShutdownEvent event) { - if (discordBot != null) discordBot.shutdown(); - if (db != null) db.close(); + if (discordBot != null) { + discordBot.shutdown(); + } + if (db != null) { + db.close(); + } } private Path getOrCreateConfig(final String fileName) throws IOException { @@ -95,7 +134,9 @@ public final class FoxAuth { Path target = dataDir.resolve(fileName); if (Files.notExists(target)) { try (InputStream in = getClass().getResourceAsStream("/" + fileName)) { - if (in == null) throw new IOException("Resource not found: " + fileName); + if (in == null) { + throw new IOException("Resource not found: " + fileName); + } Files.copy(in, target); } } diff --git a/plugin/src/main/java/dev/loki/loAuth/plugin/cfg/MessageConfig.java b/plugin/src/main/java/dev/loki/loAuth/plugin/cfg/MessageConfig.java index 165e5e5..b935930 100644 --- a/plugin/src/main/java/dev/loki/loAuth/plugin/cfg/MessageConfig.java +++ b/plugin/src/main/java/dev/loki/loAuth/plugin/cfg/MessageConfig.java @@ -23,13 +23,33 @@ public final class MessageConfig { this.raw = raw; } - public Component header() { return text("first_login.header"); } - public Component returningHeader() { return text("returning_login.header"); } - public Component returningBody() { return text("returning_login.body"); } - public Component returningTimeout() { return text("returning_login.timeout"); } - public Component expiredHeader() { return text("expired.header"); } - public Component expiredBody() { return text("expired.body"); } - public Component success() { return text("success"); } + public Component header() { + return text("first_login.header"); + } + + public Component returningHeader() { + return text("returning_login.header"); + } + + public Component returningBody() { + return text("returning_login.body"); + } + + public Component returningTimeout() { + return text("returning_login.timeout"); + } + + public Component expiredHeader() { + return text("expired.header"); + } + + public Component expiredBody() { + return text("expired.body"); + } + + public Component success() { + return text("success"); + } public Component code(final String code) { return parse("first_login.code", Map.of("code", code)) @@ -60,7 +80,9 @@ public final class MessageConfig { private Component text(final String path, final Map placeholders) { String rawStr = resolveRaw(path); - if (rawStr == null) return Component.text('[' + path + ']'); + if (rawStr == null) { + return Component.text('[' + path + ']'); + } return parse(rawStr, placeholders); } diff --git a/plugin/src/main/java/dev/loki/loAuth/plugin/cfg/PluginCfg.java b/plugin/src/main/java/dev/loki/loAuth/plugin/cfg/PluginCfg.java index 10711e0..1c8d541 100644 --- a/plugin/src/main/java/dev/loki/loAuth/plugin/cfg/PluginCfg.java +++ b/plugin/src/main/java/dev/loki/loAuth/plugin/cfg/PluginCfg.java @@ -15,18 +15,57 @@ public final class PluginCfg implements DbConfig { cfg = new YamlConfig(configPath); } - public String getMode() { return cfg.getRequired("mode", String.class); } - public String getToken() { return cfg.get("token", ""); } - public String getDiscordLink() { return cfg.get("discord_link", "discord.gg/ЗАМЕНИ_НА_СВОЙ"); } + public String getMode() { + return cfg.getRequired("mode", String.class); + } - @Override public String getDbType() { return cfg.getRequired("db_type", String.class); } - @Override public String getDbHost() { return cfg.getRequired("db_host", String.class); } - @Override public int getDbPort() { return cfg.getRequired("db_port", Integer.class); } - @Override public String getDbName() { return cfg.getRequired("db_name", String.class); } - @Override public String getDbUser() { return cfg.getRequired("db_user", String.class); } - @Override public String getDbPassword() { return cfg.getRequired("db_password", String.class); } - @Override public int getAuthTimeoutSeconds() { return cfg.getRequired("auth_timeout_seconds", Integer.class); } - @Override public int getVerificationCodeLength(){ return cfg.getRequired("verification_code_length",Integer.class); } + public String getToken() { + return cfg.get("token", ""); + } + + public String getDiscordLink() { + return cfg.get("discord_link", "discord.gg/ЗАМЕНИ_НА_СВОЙ"); + } + + @Override + public String getDbType() { + return cfg.getRequired("db_type", String.class); + } + + @Override + public String getDbHost() { + return cfg.getRequired("db_host", String.class); + } + + @Override + public int getDbPort() { + return cfg.getRequired("db_port", Integer.class); + } + + @Override + public String getDbName() { + return cfg.getRequired("db_name", String.class); + } + + @Override + public String getDbUser() { + return cfg.getRequired("db_user", String.class); + } + + @Override + public String getDbPassword() { + return cfg.getRequired("db_password", String.class); + } + + @Override + public int getAuthTimeoutSeconds() { + return cfg.getRequired("auth_timeout_seconds", Integer.class); + } + + @Override + public int getVerificationCodeLength() { + return cfg.getRequired("verification_code_length", Integer.class); + } public MessageConfig getMessages() { Object msgs = cfg.get("messages", null); diff --git a/plugin/src/main/java/dev/loki/loAuth/plugin/listener/LoginListener.java b/plugin/src/main/java/dev/loki/loAuth/plugin/listener/LoginListener.java index ef54472..783164e 100644 --- a/plugin/src/main/java/dev/loki/loAuth/plugin/listener/LoginListener.java +++ b/plugin/src/main/java/dev/loki/loAuth/plugin/listener/LoginListener.java @@ -13,7 +13,11 @@ import org.slf4j.Logger; import java.util.Map; import java.util.Optional; -import java.util.concurrent.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; public final class LoginListener { @@ -129,6 +133,8 @@ public final class LoginListener { private void cancelKick(final String nick) { ScheduledFuture f = pendingKicks.remove(nick); - if (f != null) f.cancel(false); + if (f != null) { + f.cancel(false); + } } }