Skip to content

Commit 997b96f

Browse files
authored
Fixed Ban related issues
Fixed multiple ban-related problems across the system
1 parent e0ccd23 commit 997b96f

File tree

6 files changed

+80
-33
lines changed

6 files changed

+80
-33
lines changed

SECURITY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
**⚠️ WeGuardian is in development. Only use latest releases in production.**
1+
**⚠️ WeGuardian is in development. Only use stable releases in production.**

dependency-reduced-pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>me.wethink</groupId>
55
<artifactId>WeGuardian</artifactId>
66
<name>WeGuardian</name>
7-
<version>1.2</version>
7+
<version>1.3</version>
88
<build>
99
<resources>
1010
<resource>

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>me.wethink</groupId>
88
<artifactId>WeGuardian</artifactId>
9-
<version>1.2</version>
9+
<version>1.3</version>
1010
<packaging>jar</packaging>
1111

1212
<name>WeGuardian</name>

src/main/java/me/wethink/weGuardian/listeners/PlayerListener.java

Lines changed: 74 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,31 @@ public void onAsyncPlayerPreLogin(AsyncPlayerPreLoginEvent event) {
4343
return;
4444
}
4545

46-
foliaLib.getScheduler().runAsync(task -> {
47-
try {
48-
handlePlayerDataAsync(event);
49-
50-
checkPunishmentsAsync(event);
51-
52-
checkIPBanAsync(event);
53-
54-
} catch (Exception e) {
55-
plugin.getLogger().severe("Error in async pre-login processing for " + event.getName() + ": " + e.getMessage());
56-
e.printStackTrace();
46+
try {
47+
checkPunishmentsSync(event);
48+
49+
if (event.getLoginResult() == AsyncPlayerPreLoginEvent.Result.ALLOWED) {
50+
checkIPBanSync(event);
5751
}
58-
});
52+
53+
if (event.getLoginResult() == AsyncPlayerPreLoginEvent.Result.ALLOWED) {
54+
foliaLib.getScheduler().runAsync(task -> {
55+
try {
56+
handlePlayerDataAsync(event);
57+
} catch (Exception e) {
58+
plugin.getLogger().severe("Error handling player data for " + event.getName() + ": " + e.getMessage());
59+
e.printStackTrace();
60+
}
61+
});
62+
}
63+
64+
} catch (Exception e) {
65+
plugin.getLogger().severe("Critical error in pre-login processing for " + event.getName() + ": " + e.getMessage());
66+
e.printStackTrace();
67+
68+
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER,
69+
MessageUtils.toComponent("&c&lCONNECTION ERROR\n&7An error occurred during login verification.\n&7Please try again later."));
70+
}
5971
}
6072

6173
private void handlePlayerDataAsync(AsyncPlayerPreLoginEvent event) {
@@ -83,26 +95,44 @@ private void handlePlayerDataAsync(AsyncPlayerPreLoginEvent event) {
8395
}
8496
}
8597

86-
private void checkPunishmentsAsync(AsyncPlayerPreLoginEvent event) {
98+
private void checkPunishmentsSync(AsyncPlayerPreLoginEvent event) {
8799
try {
100+
Boolean isBanned = databaseManager.isPlayerBanned(event.getUniqueId()).join();
101+
plugin.debug("Direct ban check for %s: %s", event.getName(), isBanned);
102+
103+
if (isBanned != null && isBanned) {
104+
plugin.debug("Player %s is banned (direct check), blocking connection", event.getName());
105+
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED,
106+
MessageUtils.toComponent("&c&lYOU ARE BANNED\n&7You have been banned from this server."));
107+
return;
108+
}
109+
88110
List<Punishment> punishments = databaseManager.getActivePunishments(event.getUniqueId()).join();
89111
plugin.debug("Checking %d active punishments for player: %s", punishments.size(), event.getName());
90112

113+
if (punishments == null) {
114+
plugin.getLogger().warning("Database returned null punishments for " + event.getName() + " - denying access for safety");
115+
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER,
116+
MessageUtils.toComponent("&c&lCONNECTION ERROR\n&7Unable to verify your punishment status.\n&7Please try again later."));
117+
return;
118+
}
119+
91120
for (Punishment punishment : punishments) {
92-
if (punishment.isExpired()) {
93-
plugin.debug("Skipping expired punishment: %s for %s", punishment.getType(), event.getName());
121+
if (punishment == null) {
122+
plugin.debug("Skipping null punishment for %s", event.getName());
94123
continue;
95124
}
125+
126+
plugin.debug("Found punishment: type=%s, active=%s, expired=%s, target=%s",
127+
punishment.getType(), punishment.isActive(), punishment.isExpired(), punishment.getTargetName());
96128

97129
if (punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN) {
98130
plugin.debug("Player %s is banned, blocking connection", event.getName());
99131
String kickMessage = getBanMessage(punishment);
100132
Component kickComponent = MessageUtils.toComponent(kickMessage);
101133

102-
foliaLib.getScheduler().runNextTick(task -> {
103-
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED, kickComponent);
104-
plugin.getNotificationService().broadcastPunishment(punishment, "reconnect_attempt");
105-
});
134+
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED, kickComponent);
135+
plugin.getNotificationService().broadcastPunishment(punishment, "reconnect_attempt");
106136
return;
107137
}
108138

@@ -113,29 +143,46 @@ private void checkPunishmentsAsync(AsyncPlayerPreLoginEvent event) {
113143
}
114144
} catch (Exception e) {
115145
plugin.getLogger().severe("Error checking punishments for " + event.getName() + ": " + e.getMessage());
146+
e.printStackTrace();
147+
148+
plugin.getLogger().warning("Denying access to " + event.getName() + " due to punishment check failure");
149+
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER,
150+
MessageUtils.toComponent("&c&lCONNECTION ERROR\n&7Unable to verify your punishment status.\n&7Please try again later."));
116151
}
117152
}
118153

119-
private void checkIPBanAsync(AsyncPlayerPreLoginEvent event) {
154+
private void checkIPBanSync(AsyncPlayerPreLoginEvent event) {
120155
try {
121156
String playerIP = event.getAddress().getHostAddress();
122-
if (databaseManager.isIPBanned(playerIP).join()) {
157+
Boolean isIPBanned = databaseManager.isIPBanned(playerIP).join();
158+
159+
if (isIPBanned == null) {
160+
plugin.getLogger().warning("Database returned null for IP ban check for " + event.getName() + " (" + playerIP + ") - denying access for safety");
161+
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER,
162+
MessageUtils.toComponent("&c&lCONNECTION ERROR\n&7Unable to verify IP ban status.\n&7Please try again later."));
163+
return;
164+
}
165+
166+
if (isIPBanned) {
123167
String ipBanMessage = plugin.getMessage("screen.ipban",
124168
"&c&lYOU ARE IP BANNED\n&7Your IP address has been banned from this server.\n&7Appeal at: &e{appeal-url}");
125169
String appealUrl = plugin.getAppealUrl();
126170
ipBanMessage = ipBanMessage.replace("{appeal-url}", appealUrl);
127171

128172
Component kickComponent = MessageUtils.toComponent(ipBanMessage);
129173

130-
foliaLib.getScheduler().runNextTick(task -> {
131-
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED, kickComponent);
132-
if (plugin.getConfig().getBoolean("debug.enabled", false)) {
133-
plugin.getLogger().info("Blocked IP banned connection attempt from " + playerIP + " (" + event.getName() + ")");
134-
}
135-
});
174+
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED, kickComponent);
175+
if (plugin.getConfig().getBoolean("debug.enabled", false)) {
176+
plugin.getLogger().info("Blocked IP banned connection attempt from " + playerIP + " (" + event.getName() + ")");
177+
}
136178
}
137179
} catch (Exception e) {
138180
plugin.getLogger().severe("Error checking IP ban for " + event.getName() + ": " + e.getMessage());
181+
e.printStackTrace();
182+
183+
plugin.getLogger().warning("Denying access to " + event.getName() + " due to IP ban check failure");
184+
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER,
185+
MessageUtils.toComponent("&c&lCONNECTION ERROR\n&7Unable to verify IP ban status.\n&7Please try again later."));
139186
}
140187
}
141188

src/main/resources/config.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ discord:
102102

103103
debug:
104104
enabled: false
105-
log_performance_metrics: false
106-
log_cache_statistics: false
105+
log_performance_metrics: true
106+
log_cache_statistics: true
107107

108108
features:
109109
placeholderapi_integration: true

src/main/resources/plugin.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: WeGuardian
2-
version: '1.2'
2+
version: '1.3'
33
main: me.wethink.weGuardian.WeGuardian
44
api-version: '1.21'
55
load: STARTUP

0 commit comments

Comments
 (0)