diff --git a/build.gradle b/build.gradle index ac0085b..4d36b5c 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,6 @@ dependencies { implementation 'org.postgresql:postgresql:42.7.7' implementation 'org.flywaydb:flyway-core:10.7.2' implementation 'org.flywaydb:flyway-database-postgresql:10.7.2' - implementation 'com.google.code.gson:gson:2.11.0' } shadowJar { diff --git a/src/main/java/net/kuraczyk/banhammer/BanHammer.java b/src/main/java/net/kuraczyk/banhammer/BanHammer.java index 921ea89..5675a7c 100644 --- a/src/main/java/net/kuraczyk/banhammer/BanHammer.java +++ b/src/main/java/net/kuraczyk/banhammer/BanHammer.java @@ -1,6 +1,5 @@ package net.kuraczyk.banhammer; -import net.kuraczyk.banhammer.workers.BanJobWorker; import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -58,8 +57,6 @@ public final class BanHammer extends JavaPlugin { new BHConfig(this); getServer().getPluginManager().registerEvents(new PlayerPreLogin(this), this); - - new BanJobWorker(this); } @Override diff --git a/src/main/java/net/kuraczyk/banhammer/cmds/Ban.java b/src/main/java/net/kuraczyk/banhammer/cmds/Ban.java index 4bf22dc..7ce7d2e 100644 --- a/src/main/java/net/kuraczyk/banhammer/cmds/Ban.java +++ b/src/main/java/net/kuraczyk/banhammer/cmds/Ban.java @@ -1,10 +1,7 @@ package net.kuraczyk.banhammer.cmds; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; import io.papermc.paper.configuration.type.fallback.FallbackValue; import net.kuraczyk.banhammer.BanHammer; -import net.kuraczyk.banhammer.utils.IPBan; import net.kuraczyk.banhammer.utils.PlayerBan; import net.kuraczyk.banhammer.utils.TextUtils; import net.kyori.adventure.text.Component; @@ -20,9 +17,6 @@ import java.util.Objects; import java.util.UUID; import java.util.concurrent.TimeUnit; -import com.google.gson.Gson; - - public class Ban implements CommandExecutor { BanHammer plugin; @@ -106,7 +100,7 @@ public class Ban implements CommandExecutor { stmt.setString(2, scope); ResultSet rs = stmt.executeQuery(); if(rs.next()){ - p.sendMessage(TextUtils.colorString(resolveBanMessagePlaceholders(addPrefix(plugin.translations.getString("command.ban.alreadyBannedInScopeError")), args[0], scope, reason, p.getName()))); + p.sendMessage(TextUtils.colorString(addPrefix(plugin.translations.getString("command.ban.alreadyBannedInScopeError")))); return false; } } catch (SQLException e){ @@ -119,7 +113,9 @@ public class Ban implements CommandExecutor { if(b != null) { if(banEndDate == null) { - createPlayerKickJob(b, scope); + if(target!=null) + if(target.isOnline()) + if(Objects.equals(plugin.config.getString("serverID"), scope) || Objects.equals(scope, "*")) target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanPerm"), b))); p.sendMessage(TextUtils.colorString(resolveBanMessagePlaceholders(addPrefix(plugin.translations.getString("command.ban.successfulBanMessagePerm")), args[0], scope, reason, p.getName()))); String bcMess = plugin.translations.getString("command.ban.banPublicAnnouncementPerm"); if(bcMess!=null) Bukkit.broadcast(TextUtils.colorString(resolveBanMessagePlaceholders(bcMess, args[0], scope, reason, p.getName()))); @@ -135,7 +131,9 @@ public class Ban implements CommandExecutor { long timeLeftSeconds = TimeUnit.MILLISECONDS.toSeconds(timeLeft); String parsedBanDuration = TextUtils.parsePolishDate(timeLeftDays, timeLeftHours, timeLeftMinutes, timeLeftSeconds); - createPlayerKickJob(b, scope); + if(target!=null) + if(target.isOnline()) + if(Objects.equals(plugin.config.getString("serverID"), scope) || Objects.equals(scope, "*")) target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanTemp"), b))); p.sendMessage(TextUtils.colorString(resolveBanMessagePlaceholders(addPrefix(plugin.translations.getString("command.ban.successfulBanMessageTemp")), args[0], scope, reason, p.getName(), parsedBanDuration))); String bcMess = plugin.translations.getString("command.ban.banPublicAnnouncementTemp"); if(bcMess!=null) Bukkit.broadcast(TextUtils.colorString(resolveBanMessagePlaceholders(bcMess, args[0], scope, reason, p.getName(), parsedBanDuration))); @@ -216,7 +214,7 @@ public class Ban implements CommandExecutor { stmt.setString(2, scope); ResultSet rs = stmt.executeQuery(); if(rs.next()){ - Bukkit.getConsoleSender().sendMessage(TextUtils.colorString(resolveBanMessagePlaceholders(addPrefix(plugin.translations.getString("command.ban.alreadyBannedInScopeError")), args[0], scope, reason, "CONSOLE"))); + Bukkit.getConsoleSender().sendMessage(TextUtils.colorString(addPrefix(plugin.translations.getString("command.ban.alreadyBannedInScopeError")))); return false; } } catch (SQLException e){ @@ -229,7 +227,9 @@ public class Ban implements CommandExecutor { if(b != null) { if(banEndDate == null) { - createPlayerKickJob(b, scope); + if(target!=null) + if(target.isOnline()) + if(Objects.equals(plugin.config.getString("serverID"), scope) || Objects.equals(scope, "*")) target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanPerm"), b))); Bukkit.getConsoleSender().sendMessage(TextUtils.colorString(resolveBanMessagePlaceholders(addPrefix(plugin.translations.getString("command.ban.successfulBanMessagePerm")), args[0], scope, reason, "CONSOLE"))); String bcMess = plugin.translations.getString("command.ban.banPublicAnnouncementPerm"); if(bcMess!=null) Bukkit.broadcast(TextUtils.colorString(resolveBanMessagePlaceholders(bcMess, args[0], scope, reason, "CONSOLE"))); @@ -245,7 +245,9 @@ public class Ban implements CommandExecutor { long timeLeftSeconds = TimeUnit.MILLISECONDS.toSeconds(timeLeft); String parsedBanDuration = TextUtils.parsePolishDate(timeLeftDays, timeLeftHours, timeLeftMinutes, timeLeftSeconds); - createPlayerKickJob(b, scope); + if(target!=null) + if(target.isOnline()) + if(Objects.equals(plugin.config.getString("serverID"), scope) || Objects.equals(scope, "*")) target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanTemp"), b))); Bukkit.getConsoleSender().sendMessage(TextUtils.colorString(resolveBanMessagePlaceholders(addPrefix(plugin.translations.getString("command.ban.successfulBanMessageTemp")), args[0], scope, reason, "CONSOLE", parsedBanDuration))); String bcMess = plugin.translations.getString("command.ban.banPublicAnnouncementTemp"); if(bcMess!=null) Bukkit.broadcast(TextUtils.colorString(resolveBanMessagePlaceholders(bcMess, args[0], scope, reason, "CONSOLE", parsedBanDuration))); @@ -307,27 +309,6 @@ public class Ban implements CommandExecutor { } } - private void createPlayerKickJob(PlayerBan b, String scope){ - final Gson gson = new Gson(); - try { - Connection conn = plugin.db.getConnection(); - - JsonElement banObject = gson.toJsonTree(b); - JsonObject wrapper = new JsonObject(); - wrapper.addProperty("ban_type", "player"); - wrapper.addProperty("ban_scope", scope); - wrapper.add("ban_data", banObject); - String json = gson.toJson(wrapper); - - PreparedStatement ps = conn.prepareStatement("SELECT pg_notify('ban_jobs', ?)"); - ps.setString(1, json); - ps.execute(); - } - catch (SQLException e) { - plugin.getLogger().severe(e.toString()); - } - } - private String resolveBanMessagePlaceholders(String s, String player, String scope, String reason, String operator) { return s.replace("{player}", player) .replace("{scope}", scope) diff --git a/src/main/java/net/kuraczyk/banhammer/cmds/BanIP.java b/src/main/java/net/kuraczyk/banhammer/cmds/BanIP.java index 3a7c5cd..8a6991d 100644 --- a/src/main/java/net/kuraczyk/banhammer/cmds/BanIP.java +++ b/src/main/java/net/kuraczyk/banhammer/cmds/BanIP.java @@ -18,10 +18,6 @@ import java.util.Objects; import java.util.UUID; import java.util.concurrent.TimeUnit; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.Gson; - public class BanIP implements CommandExecutor { BanHammer plugin; @@ -123,7 +119,10 @@ public class BanIP implements CommandExecutor { if(b != null) { if(banEndDate == null) { - createIPKickJob(b, scope); + for(Player target : Bukkit.getOnlinePlayers()) { + if (target.getAddress().getAddress().equals(addr)) + if(Objects.equals(plugin.config.getString("serverID"), scope) || Objects.equals(scope, "*")) target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanPerm"), b))); + } p.sendMessage(TextUtils.colorString(resolveIpBanMessagePlaceholders(addPrefix(plugin.translations.getString("command.banip.successfulBanMessagePerm")), args[0], scope, reason, p.getName()))); String bcMess = plugin.translations.getString("command.banip.banPublicAnnouncementPerm"); if(bcMess!=null) Bukkit.broadcast(TextUtils.colorString(resolveIpBanMessagePlaceholders(bcMess, args[0], scope, reason, p.getName()))); @@ -139,7 +138,11 @@ public class BanIP implements CommandExecutor { long timeLeftSeconds = TimeUnit.MILLISECONDS.toSeconds(timeLeft); String parsedBanDuration = TextUtils.parsePolishDate(timeLeftDays, timeLeftHours, timeLeftMinutes, timeLeftSeconds); - createIPKickJob(b, scope); + for(Player target : Bukkit.getOnlinePlayers()) { + if (target.getAddress().getAddress().equals(addr)) + if (Objects.equals(plugin.config.getString("serverID"), scope) || Objects.equals(scope, "*")) + target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanTemp"), b))); + } p.sendMessage(TextUtils.colorString(resolveIpBanMessagePlaceholders(addPrefix(plugin.translations.getString("command.banip.successfulBanMessageTemp")), args[0], scope, reason, p.getName(), parsedBanDuration))); String bcMess = plugin.translations.getString("command.banip.banPublicAnnouncementTemp"); if(bcMess!=null) Bukkit.broadcast(TextUtils.colorString(resolveIpBanMessagePlaceholders(bcMess, args[0], scope, reason, p.getName(), parsedBanDuration))); @@ -238,7 +241,10 @@ public class BanIP implements CommandExecutor { if(b != null) { if(banEndDate == null) { - createIPKickJob(b, scope); + for(Player target : Bukkit.getOnlinePlayers()) { + if (target.getAddress().getAddress().equals(addr)) + if(Objects.equals(plugin.config.getString("serverID"), scope) || Objects.equals(scope, "*")) target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanPerm"), b))); + } Bukkit.getConsoleSender().sendMessage(TextUtils.colorString(resolveIpBanMessagePlaceholders(addPrefix(plugin.translations.getString("command.banip.successfulBanMessagePerm")), args[0], scope, reason, "CONSOLE"))); String bcMess = plugin.translations.getString("command.banip.banPublicAnnouncementPerm"); if(bcMess!=null) Bukkit.broadcast(TextUtils.colorString(resolveIpBanMessagePlaceholders(bcMess, args[0], scope, reason, "CONSOLE"))); @@ -254,7 +260,11 @@ public class BanIP implements CommandExecutor { long timeLeftSeconds = TimeUnit.MILLISECONDS.toSeconds(timeLeft); String parsedBanDuration = TextUtils.parsePolishDate(timeLeftDays, timeLeftHours, timeLeftMinutes, timeLeftSeconds); - createIPKickJob(b, scope); + for(Player target : Bukkit.getOnlinePlayers()) { + if (target.getAddress().getAddress().equals(addr)) + if (Objects.equals(plugin.config.getString("serverID"), scope) || Objects.equals(scope, "*")) + target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanTemp"), b))); + } Bukkit.getConsoleSender().sendMessage(TextUtils.colorString(resolveIpBanMessagePlaceholders(addPrefix(plugin.translations.getString("command.banip.successfulBanMessageTemp")), args[0], scope, reason, "CONSOLE", parsedBanDuration))); String bcMess = plugin.translations.getString("command.banip.banPublicAnnouncementTemp"); if(bcMess!=null) Bukkit.broadcast(TextUtils.colorString(resolveIpBanMessagePlaceholders(bcMess, args[0], scope, reason, "CONSOLE", parsedBanDuration))); @@ -315,27 +325,6 @@ public class BanIP implements CommandExecutor { } } - private void createIPKickJob(IPBan b, String scope){ - final Gson gson = new Gson(); - try { - Connection conn = plugin.db.getConnection(); - - JsonElement banObject = gson.toJsonTree(b); - JsonObject wrapper = new JsonObject(); - wrapper.addProperty("ban_type", "ip"); - wrapper.addProperty("ban_scope", scope); - wrapper.add("ban_data", banObject); - String json = gson.toJson(wrapper); - - PreparedStatement ps = conn.prepareStatement("SELECT pg_notify('ban_jobs', ?)"); - ps.setString(1, json); - ps.execute(); - } - catch (SQLException e) { - plugin.getLogger().severe(e.toString()); - } - } - private String resolveIpBanMessagePlaceholders(String s, String ipAddr, String scope, String reason, String operator) { return s.replace("{ipAddr}", ipAddr) .replace("{scope}", scope) diff --git a/src/main/java/net/kuraczyk/banhammer/utils/IPBan.java b/src/main/java/net/kuraczyk/banhammer/utils/IPBan.java index f412d3e..adb6d68 100644 --- a/src/main/java/net/kuraczyk/banhammer/utils/IPBan.java +++ b/src/main/java/net/kuraczyk/banhammer/utils/IPBan.java @@ -17,24 +17,4 @@ public class IPBan { this.operator = operator; this.banId = banId; } - - public InetAddress getIp() { - return ip; - } - - public String getReason() { - return reason; - } - - public String getTimeLeft() { - return timeLeft; - } - - public String getOperator() { - return operator; - } - - public UUID getBanId() { - return banId; - } } diff --git a/src/main/java/net/kuraczyk/banhammer/utils/PlayerBan.java b/src/main/java/net/kuraczyk/banhammer/utils/PlayerBan.java index 88060b5..7172850 100644 --- a/src/main/java/net/kuraczyk/banhammer/utils/PlayerBan.java +++ b/src/main/java/net/kuraczyk/banhammer/utils/PlayerBan.java @@ -2,7 +2,6 @@ package net.kuraczyk.banhammer.utils; import org.bukkit.entity.Player; -import java.net.InetAddress; import java.sql.Timestamp; import java.util.UUID; @@ -23,28 +22,4 @@ public class PlayerBan { this.banId = banId; } - public String getPlayerName() { - return playerName; - } - - public UUID getPlayerUUID() { - return uuid; - } - - public String getReason() { - return reason; - } - - public String getTimeLeft() { - return timeLeft; - } - - public String getOperator() { - return operator; - } - - public UUID getBanId() { - return banId; - } - } \ No newline at end of file diff --git a/src/main/java/net/kuraczyk/banhammer/workers/BanJobWorker.java b/src/main/java/net/kuraczyk/banhammer/workers/BanJobWorker.java deleted file mode 100644 index 2a68639..0000000 --- a/src/main/java/net/kuraczyk/banhammer/workers/BanJobWorker.java +++ /dev/null @@ -1,126 +0,0 @@ -package net.kuraczyk.banhammer.workers; - -import net.kuraczyk.banhammer.BanHammer; -import net.kuraczyk.banhammer.utils.IPBan; -import net.kuraczyk.banhammer.utils.PlayerBan; -import net.kuraczyk.banhammer.utils.TextUtils; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import org.postgresql.PGConnection; -import org.postgresql.PGNotification; - -import javax.swing.plaf.nimbus.State; -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.Objects; - -import com.google.gson.*; - -public class BanJobWorker { - - BanHammer plugin; - - public BanJobWorker(BanHammer p) { - plugin=p; - banJobListener(); - } - - private void banJobListener() { - plugin.getServer().getScheduler().runTaskAsynchronously(plugin, () -> { - try { - Connection conn = plugin.db.getConnection(); - PGConnection pgConn = conn.unwrap(PGConnection.class); - - try (Statement stmt = conn.createStatement()) { - stmt.execute("LISTEN ban_jobs"); - } - - while (!conn.isClosed()){ - try (Statement ping = conn.createStatement()) { - ping.execute("SELECT 1"); - } - - PGNotification[] notifications = pgConn.getNotifications(); - - if(notifications!=null){ - for(PGNotification notif : notifications){ - JsonObject unwrappedJson = JsonParser.parseString(notif.getParameter()).getAsJsonObject(); - String banType = unwrappedJson.get("ban_type").getAsString(); - String banScope = unwrappedJson.get("ban_scope").getAsString(); - JsonElement banData = unwrappedJson.get("ban_data"); - - if(banScope.equals("*") || banScope.equals(plugin.config.getString("serverID"))){ - if(banJobExecutor(banType, banData)) plugin.getLogger().info(String.format("[BanHammer] Job %d has been executed successfully!", notif.getPID())); - else plugin.getLogger().severe("[BanHammer] Error occured while executing ban job!"); - } - - } - } - } - - } catch (SQLException e) { - plugin.getLogger().severe(e.toString()); - } - }); - } - - private boolean banJobExecutor(String type, JsonElement banData) { - final Gson gson = new Gson(); - switch(type){ - case "player" -> { - PlayerBan ban = gson.fromJson(banData, PlayerBan.class); - handlePlayerBanJob(ban); - } - case "ip" -> { - IPBan ban = gson.fromJson(banData, IPBan.class); - handleIPBanJob(ban); - } - default -> { - plugin.getLogger().severe("[BanHammer] (BanJobExecutorException) Unexpected ban type provided."); - return false; - } - } - return true; - } - - private boolean handlePlayerBanJob(PlayerBan b) { - Player target = Bukkit.getPlayer(b.getPlayerName()); - if(target!=null) - if(target.isOnline()) { - if(b.getTimeLeft()!=null){ - plugin.getServer().getScheduler().runTask(plugin, () -> { - target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanTemp"), b))); - }); - return true; - } - plugin.getServer().getScheduler().runTask(plugin, () -> { - target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanPerm"), b))); - }); - return true; - } - - return false; - } - - private boolean handleIPBanJob(IPBan b) { - for(Player target : Bukkit.getOnlinePlayers()) { - if (target.getAddress().getAddress().equals(b.getIp())) { - if (b.getTimeLeft() != null) { - plugin.getServer().getScheduler().runTask(plugin, () -> { - target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanTemp"), b))); - }); - return true; - } - plugin.getServer().getScheduler().runTask(plugin, () -> { - target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanPerm"), b))); - }); - return true; - } - } - - return false; - } - -} \ No newline at end of file