Skip to content

Commit fb365b9

Browse files
authored
Fixed All Punishment issues
Fixed all major bugs related to bans and punishments. Improved stability and performance. A few minor issues remain, but they will be addressed shortly in upcoming patches.
1 parent 997b96f commit fb365b9

File tree

4 files changed

+77
-33
lines changed

4 files changed

+77
-33
lines changed

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.3</version>
7+
<version>1.4</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.3</version>
9+
<version>1.4</version>
1010
<packaging>jar</packaging>
1111

1212
<name>WeGuardian</name>

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

Lines changed: 74 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,17 @@ public void onAsyncPlayerPreLogin(AsyncPlayerPreLoginEvent event) {
4848

4949
if (event.getLoginResult() == AsyncPlayerPreLoginEvent.Result.ALLOWED) {
5050
checkIPBanSync(event);
51-
}
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-
});
51+
52+
if (event.getLoginResult() == AsyncPlayerPreLoginEvent.Result.ALLOWED) {
53+
foliaLib.getScheduler().runAsync(task -> {
54+
try {
55+
handlePlayerDataAsync(event);
56+
} catch (Exception e) {
57+
plugin.getLogger().severe("Error handling player data for " + event.getName() + ": " + e.getMessage());
58+
e.printStackTrace();
59+
}
60+
});
61+
}
6262
}
6363

6464
} catch (Exception e) {
@@ -97,16 +97,6 @@ private void handlePlayerDataAsync(AsyncPlayerPreLoginEvent event) {
9797

9898
private void checkPunishmentsSync(AsyncPlayerPreLoginEvent event) {
9999
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-
110100
List<Punishment> punishments = databaseManager.getActivePunishments(event.getUniqueId()).join();
111101
plugin.debug("Checking %d active punishments for player: %s", punishments.size(), event.getName());
112102

@@ -123,7 +113,17 @@ private void checkPunishmentsSync(AsyncPlayerPreLoginEvent event) {
123113
continue;
124114
}
125115

126-
plugin.debug("Found punishment: type=%s, active=%s, expired=%s, target=%s",
116+
if (!punishment.isActive()) {
117+
plugin.debug("Skipping inactive punishment for %s", event.getName());
118+
continue;
119+
}
120+
121+
if (punishment.isExpired()) {
122+
plugin.debug("Punishment expired for %s, skipping", event.getName());
123+
continue;
124+
}
125+
126+
plugin.debug("Found active punishment: type=%s, active=%s, expired=%s, target=%s",
127127
punishment.getType(), punishment.isActive(), punishment.isExpired(), punishment.getTargetName());
128128

129129
if (punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN) {
@@ -165,9 +165,19 @@ private void checkIPBanSync(AsyncPlayerPreLoginEvent event) {
165165

166166
if (isIPBanned) {
167167
String ipBanMessage = plugin.getMessage("screen.ipban",
168-
"&c&lYOU ARE IP BANNED\n&7Your IP address has been banned from this server.\n&7Appeal at: &e{appeal-url}");
168+
"&c&l&m====================\n" +
169+
"&c&lIP BANNED\n" +
170+
"&7&m====================\n\n" +
171+
"&7Your IP address has been banned from this server.\n" +
172+
"&7IP: &f" + playerIP + "\n\n" +
173+
"&7Appeal at: &e{appeal-url}\n" +
174+
"&7&m====================");
169175
String appealUrl = plugin.getAppealUrl();
170-
ipBanMessage = ipBanMessage.replace("{appeal-url}", appealUrl);
176+
if (appealUrl != null && !appealUrl.isEmpty()) {
177+
ipBanMessage = ipBanMessage.replace("{appeal-url}", appealUrl);
178+
} else {
179+
ipBanMessage = ipBanMessage.replace("&7Appeal at: &e{appeal-url}\n", "");
180+
}
171181

172182
Component kickComponent = MessageUtils.toComponent(ipBanMessage);
173183

@@ -224,17 +234,51 @@ public void onPlayerQuit(PlayerQuitEvent event) {
224234

225235
private String getBanMessage(Punishment punishment) {
226236
String template = switch (punishment.getType()) {
227-
case BAN -> plugin.getMessage("screen.ban", "&c&lYOU ARE BANNED");
228-
case TEMPBAN -> plugin.getMessage("screen.tempban", "&e&lTEMPORARY BAN");
229-
default -> "&cYou are banned from this server.";
237+
case BAN -> plugin.getMessage("screen.ban",
238+
"&c&l&m====================\n" +
239+
"&c&lYOU ARE BANNED\n" +
240+
"&7&m====================\n\n" +
241+
"&7Reason: &f{reason}\n" +
242+
"&7Staff: &f{staff}\n" +
243+
"&7Date: &f{datetime}\n" +
244+
"&7Duration: &f{duration}\n\n" +
245+
"&7Appeal at: &e{appeal-url}\n" +
246+
"&7&m====================");
247+
case TEMPBAN -> plugin.getMessage("screen.tempban",
248+
"&e&l&m====================\n" +
249+
"&e&lTEMPORARY BAN\n" +
250+
"&7&m====================\n\n" +
251+
"&7Reason: &f{reason}\n" +
252+
"&7Staff: &f{staff}\n" +
253+
"&7Date: &f{datetime}\n" +
254+
"&7Expires: &f{expires}\n" +
255+
"&7Time Left: &f{time-left}\n\n" +
256+
"&7Appeal at: &e{appeal-url}\n" +
257+
"&7&m====================");
258+
default -> "&c&lYOU ARE BANNED\n&7You have been banned from this server.";
230259
};
231260

232-
return MessageUtils.formatPunishmentMessage(template, punishment);
261+
String appealUrl = plugin.getAppealUrl();
262+
if (appealUrl != null && !appealUrl.isEmpty()) {
263+
return MessageUtils.formatPunishmentMessage(template, punishment, appealUrl);
264+
} else {
265+
return MessageUtils.formatPunishmentMessage(template, punishment);
266+
}
233267
}
234268

235269
private String getMuteMessage(Punishment punishment) {
236-
String key = "actionbar." + punishment.getType().name().toLowerCase();
237-
String template = plugin.getMessage(key, "");
270+
String template = switch (punishment.getType()) {
271+
case MUTE -> plugin.getMessage("actionbar.mute",
272+
"&c&lMUTED &8| &7Reason: &f{reason} &8| &7Staff: &f{staff}");
273+
case TEMPMUTE -> plugin.getMessage("actionbar.tempmute",
274+
"&e&lTEMPORARILY MUTED &8| &7Time Left: &f{time-left} &8| &7Reason: &f{reason}");
275+
default -> "";
276+
};
277+
278+
if (template.isEmpty()) {
279+
return "";
280+
}
281+
238282
return MessageUtils.formatPunishmentMessage(template, punishment);
239283
}
240284
}

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.3'
2+
version: '1.4'
33
main: me.wethink.weGuardian.WeGuardian
44
api-version: '1.21'
55
load: STARTUP

0 commit comments

Comments
 (0)