Skip to content

Commit 2c0f084

Browse files
committed
2.0.9
1 parent c391ec3 commit 2c0f084

17 files changed

+218
-69
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@
2424
- [x] Modular multi-platform support
2525
- [x] JSON5 based configuration
2626

27+
<h2>Requirements</h2>
28+
29+
- Eagler(craft)XServer v1.0.2 or newer
30+
- JDK 21 or newer
31+
2732
<h2>Download</h2>
2833
The latest release can be found at <b><a href="https://github.com/WebMCDevelopment/originblacklist/releases/latest/">https://github.com/WebMCDevelopment/originblacklist/releases/latest/</a></b>
2934

build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ val PLUGIN_NAME = "OriginBlacklist"
1414
val PLUGIN_IDEN = "originblacklist"
1515
val PLUGIN_DOMN = "xyz.webmc.$PLUGIN_IDEN"
1616
val PLUGIN_DESC = "An eaglercraft client blacklist plugin."
17-
val PLUGIN_VERS = "2.0.8"
17+
val PLUGIN_VERS = "2.0.9"
1818
val PLUGIN_SITE = "https://github.com/WebMCDevelopment/$PLUGIN_IDEN"
1919
val PLUGIN_DEPA = listOf("EaglercraftXServer")
2020
val PLUGIN_DEPB = listOf("EaglercraftXServer")
@@ -91,7 +91,7 @@ sourceSets {
9191
}
9292

9393
java {
94-
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
94+
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
9595
}
9696

9797
val BUILD_PROPS = mapOf(
@@ -113,7 +113,7 @@ val BUILD_PROPS = mapOf(
113113

114114
tasks.withType<JavaCompile>().configureEach {
115115
options.encoding = "UTF-8"
116-
options.release.set(17)
116+
options.release.set(21)
117117
}
118118

119119
tasks.withType<ProcessResources>().configureEach {

src/main/java/xyz/webmc/originblacklist/base/OriginBlacklist.java

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import xyz.webmc.originblacklist.base.events.OriginBlacklistLoginEvent;
88
import xyz.webmc.originblacklist.base.events.OriginBlacklistMOTDEvent;
99
import xyz.webmc.originblacklist.base.http.OriginBlacklistRequestHandler;
10+
import xyz.webmc.originblacklist.base.metrics.GenericMetricsAdapter;
1011
import xyz.webmc.originblacklist.base.util.BuildInfo;
1112
import xyz.webmc.originblacklist.base.util.IOriginBlacklistPlugin;
1213
import xyz.webmc.originblacklist.base.util.OPlayer;
@@ -15,6 +16,7 @@
1516
import java.io.InputStream;
1617
import java.io.OutputStream;
1718
import java.net.HttpURLConnection;
19+
import java.net.URI;
1820
import java.net.URL;
1921
import java.net.URLDecoder;
2022
import java.nio.charset.StandardCharsets;
@@ -26,7 +28,9 @@
2628
import java.time.Instant;
2729
import java.util.ArrayList;
2830
import java.util.Base64;
31+
import java.util.HashMap;
2932
import java.util.List;
33+
import java.util.Map;
3034
import java.util.concurrent.TimeUnit;
3135

3236
import de.marhali.json5.Json5;
@@ -38,8 +42,11 @@
3842
import net.kyori.adventure.text.Component;
3943
import net.kyori.adventure.text.minimessage.MiniMessage;
4044
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
45+
import net.lax1dude.eaglercraft.backend.server.api.IBasePlayer;
46+
import net.lax1dude.eaglercraft.backend.server.api.IEaglerPlayer;
4147
import net.lax1dude.eaglercraft.backend.server.api.IEaglerXServerAPI;
4248
import net.lax1dude.eaglercraft.backend.server.api.query.IMOTDConnection;
49+
import org.bstats.charts.AdvancedPie;
4350
import org.semver4j.Semver;
4451

4552
@SuppressWarnings({ "rawtypes" })
@@ -55,13 +62,15 @@ public final class OriginBlacklist {
5562

5663
private final IOriginBlacklistPlugin plugin;
5764
private final OriginBlacklistConfig config;
65+
private final GenericMetricsAdapter metrics;
5866
private final Json5 json5;
5967
private String updateURL;
6068
private Path jarFile;
6169

6270
public OriginBlacklist(final IOriginBlacklistPlugin plugin) {
6371
this.plugin = plugin;
6472
this.config = new OriginBlacklistConfig(this);
73+
this.metrics = plugin.getMetrics();
6574
this.json5 = Json5.builder(builder -> builder.prettyPrinting().indentFactor(0).build());
6675
}
6776

@@ -73,15 +82,34 @@ public final void init() {
7382
if (this.isBlacklistAPIEnabled()) {
7483
OriginBlacklistRequestHandler.register(this);
7584
}
85+
this.metrics.addCustomChart(new AdvancedPie("player_types", () -> {
86+
final Map<String, Integer> playerMap = new HashMap<>();
87+
for (final Object player : this.getEaglerAPI().getAllPlayers()) {
88+
if (player instanceof IBasePlayer bPlayer) {
89+
final String key = (bPlayer instanceof IEaglerPlayer) ? "Eagler" : "Java";
90+
playerMap.put(key, playerMap.getOrDefault(key, 0) + 1);
91+
}
92+
}
93+
return playerMap;
94+
}));
7695
this.plugin.log(EnumLogLevel.INFO, "Initialized Plugin");
7796
this.plugin.log(EnumLogLevel.DEBUG, "Commit " + COMMIT_L);
97+
if (this.isMetricsEnabled()) {
98+
this.metrics.start();
99+
}
100+
this.plugin.scheduleRepeat(() -> {
101+
this.plugin.log(EnumLogLevel.INFO, String.valueOf(this.isMetricsEnabled()));
102+
}, 1, TimeUnit.SECONDS);
78103
}
79104

80105
public final void shutdown() {
81106
this.plugin.log(EnumLogLevel.INFO, "Shutting down...");
82107
if (this.isBlacklistAPIEnabled()) {
83108
OriginBlacklistRequestHandler.unRegister(this);
84109
}
110+
if (this.isMetricsEnabled()) {
111+
this.metrics.shutdown();
112+
}
85113
this.plugin.shutdown();
86114
}
87115

@@ -94,6 +122,14 @@ public final void handleReload() {
94122
}
95123
} catch (final Throwable t) {
96124
}
125+
try {
126+
if (this.isMetricsEnabled()) {
127+
this.metrics.start();
128+
} else {
129+
this.metrics.shutdown();
130+
}
131+
} catch (final Throwable t) {
132+
}
97133
}
98134

99135
public final void handleLogin(final OriginBlacklistLoginEvent event) {
@@ -117,7 +153,7 @@ public final void handleLogin(final OriginBlacklistLoginEvent event) {
117153
blacklisted_value, blacklisted.getActionString(), false), event);
118154
this.sendWebhooks(event, blacklisted);
119155
final String name = player.getName();
120-
if (isNonNull(name)) {
156+
if (isNonNullStr(name)) {
121157
this.plugin.log(EnumLogLevel.INFO, "Prevented blacklisted player " + name + " from joining.");
122158
this.updateLogFile(event, blacklisted);
123159
}
@@ -181,7 +217,8 @@ public final void setEaglerMOTD(final Component comp, final OriginBlacklistMOTDE
181217
}
182218
final List<String> pLst = new ArrayList<>();
183219
for (final Json5Element ln : this.config.getArray("motd.players.hover").getAsJson5Array()) {
184-
pLst.add(getLegacyFromMiniMessage(ln.getAsString().replaceAll("%discord_invite%", this.config.getString("discord.invite"))));
220+
pLst.add(getLegacyFromMiniMessage(
221+
ln.getAsString().replaceAll("%discord_invite%", this.config.getString("discord.invite"))));
185222
}
186223
conn.setServerMOTD(lst);
187224
conn.setPlayerTotal(this.config.getInteger("motd.players.online"));
@@ -197,7 +234,7 @@ public final void checkForUpdates(final Runnable action1, final Runnable action2
197234
this.plugin.runAsync(() -> {
198235
this.updateURL = UpdateChecker.checkForUpdates(PLUGIN_REPO, this.plugin.getPluginVersion(),
199236
this.config.getBoolean("update_checker.allow_snapshots"));
200-
if (isNonNull((this.updateURL))) {
237+
if (isNonNullStr((this.updateURL))) {
201238
action1.run();
202239
return;
203240
}
@@ -210,7 +247,7 @@ public final void checkForUpdates(final Runnable action1, final Runnable action2
210247

211248
public final void updatePlugin(final Runnable action1, final Runnable action2) {
212249
try {
213-
final URL url = new URL(this.updateURL);
250+
final URL url = (new URI(this.updateURL)).toURL();
214251
final Path jar = this.jarFile;
215252
final Path bak = jar.resolveSibling(jar.getFileName().toString() + ".bak");
216253
final Path upd = jar
@@ -240,8 +277,8 @@ public final void updatePlugin(final Runnable action1, final Runnable action2) {
240277
action1.run();
241278
return;
242279
} catch (final Throwable t) {
243-
t.printStackTrace();
244280
Files.move(bak, jar, StandardCopyOption.REPLACE_EXISTING);
281+
throw t;
245282
}
246283
} catch (final Throwable t) {
247284
t.printStackTrace();
@@ -264,7 +301,7 @@ public final EnumBlacklistType testBlacklist(final OPlayer player) {
264301
final boolean whitelist = this.config.getBoolean("blacklist_to_whitelist");
265302
EnumBlacklistType type = EnumBlacklistType.NONE;
266303

267-
if (isNonNull(origin)) {
304+
if (isNonNullStr(origin)) {
268305
if (whitelist && !type.isBlacklisted())
269306
type = EnumBlacklistType.ORIGIN;
270307
for (final Json5Element element : this.config.getArray("blacklist.origins").getAsJson5Array()) {
@@ -280,7 +317,7 @@ else if (!type.isBlacklisted())
280317
return whitelist ? EnumBlacklistType.NONE : EnumBlacklistType.ORIGIN;
281318
}
282319

283-
if (isNonNull(brand)) {
320+
if (isNonNullStr(brand)) {
284321
if (whitelist && !type.isBlacklisted())
285322
type = EnumBlacklistType.BRAND;
286323
for (final Json5Element element : this.config.getArray("blacklist.brands")) {
@@ -294,7 +331,7 @@ else if (!type.isBlacklisted())
294331
}
295332
}
296333

297-
if (isNonNull(name)) {
334+
if (isNonNullStr(name)) {
298335
if (whitelist && !type.isBlacklisted())
299336
type = EnumBlacklistType.NAME;
300337
for (final Json5Element element : this.config.getArray("blacklist.player_names")) {
@@ -308,7 +345,7 @@ else if (!type.isBlacklisted())
308345
}
309346
}
310347

311-
if (isNonNull(addr)) {
348+
if (isNonNullStr(addr)) {
312349
if (whitelist && !type.isBlacklisted())
313350
type = EnumBlacklistType.ADDR;
314351
for (final Json5Element element : this.config.getArray("blacklist.ip_addresses")) {
@@ -446,7 +483,7 @@ private final void sendWebhooks(final OriginBlacklistLoginEvent event, final Enu
446483
for (final Json5Element element : arr) {
447484
this.plugin.runAsync(() -> {
448485
try {
449-
final URL url = new URL(element.getAsString());
486+
final URL url = (new URI(element.getAsString())).toURL();
450487
final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
451488
conn.setRequestMethod("POST");
452489
conn.setRequestProperty("Content-Type", "application/json");
@@ -519,7 +556,7 @@ public static final String getUserAgent() {
519556
return BuildInfo.get("plugin_name") + "/" + BuildInfo.get("plugin_vers") + "+" + BuildInfo.get("git_cm_hash");
520557
}
521558

522-
public static final boolean isNonNull(final String str) {
559+
public static final boolean isNonNullStr(final String str) {
523560
return str != null && !str.isEmpty() && !str.isBlank() && !str.equals("null");
524561
}
525562

src/main/java/xyz/webmc/originblacklist/base/command/OriginBlacklistCommand.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public boolean execute(final CommandContext ctx) {
5454
} else {
5555
ctx.reply(NO_PERMISSION);
5656
}
57-
} else if ((add || remove) && OriginBlacklist.isNonNull(argB)) {
57+
} else if ((add || remove) && OriginBlacklist.isNonNullStr(argB)) {
5858
if ((add && ctx.hasPermission("originblacklist.command.add"))
5959
|| (remove && ctx.hasPermission("originblacklist.command.add"))) {
6060
final String arrName;
@@ -69,7 +69,7 @@ public boolean execute(final CommandContext ctx) {
6969
} else {
7070
arrName = null;
7171
}
72-
if (OriginBlacklist.isNonNull(arrName)) {
72+
if (OriginBlacklist.isNonNullStr(arrName)) {
7373
final String arrPath = "blacklist." + arrName;
7474
final Json5Array arr = config.getArray(arrPath);
7575
if (add) {
@@ -95,7 +95,7 @@ public boolean execute(final CommandContext ctx) {
9595
} else {
9696
ctx.reply(NO_PERMISSION);
9797
}
98-
} else if ("test".equalsIgnoreCase(command) && OriginBlacklist.isNonNull(argA)) {
98+
} else if ("test".equalsIgnoreCase(command) && OriginBlacklist.isNonNullStr(argA)) {
9999
if (ctx.hasPermission("originblacklist.command.test")) {
100100
if (this.isBlacklisted(argA)) {
101101
ctx.reply("<green>" + argA + " is on the blacklist.</green>");

src/main/java/xyz/webmc/originblacklist/base/config/OriginBlacklistConfig.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public final void saveConfig() {
132132
public final Json5Element get(final String key) {
133133
Json5Element element = null;
134134

135-
if (this.config != null && OriginBlacklist.isNonNull(key)) {
135+
if (this.config != null && OriginBlacklist.isNonNullStr(key)) {
136136
element = this.config;
137137
final String[] parts = splitPath(key);
138138

@@ -493,7 +493,7 @@ private static final boolean merge(final Json5Object aObj, final Json5Object bOb
493493

494494
private static final void addJSONObj(final Json5Object obj, final String key, final Json5Element value,
495495
final String comment) {
496-
if (OriginBlacklist.isNonNull(comment)) {
496+
if (OriginBlacklist.isNonNullStr(comment)) {
497497
value.setComment(comment);
498498
}
499499
obj.add(key, value);
@@ -502,7 +502,7 @@ private static final void addJSONObj(final Json5Object obj, final String key, fi
502502
private static final String[] splitPath(final String key) {
503503
final String[] ret;
504504

505-
if (OriginBlacklist.isNonNull(key)) {
505+
if (OriginBlacklist.isNonNullStr(key)) {
506506
ret = key.split("\\.");
507507
} else {
508508
ret = new String[0];

src/main/java/xyz/webmc/originblacklist/base/enums/EnumBlacklistType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ private EnumBlacklistType(final String str, final String alt, final String arr,
1818
this.str = str;
1919
this.alt = alt;
2020
this.arr = arr;
21-
this.act = OriginBlacklist.isNonNull(act) ? act : OriginBlacklist.GENERIC_STR.toLowerCase();
21+
this.act = OriginBlacklist.isNonNullStr(act) ? act : OriginBlacklist.GENERIC_STR.toLowerCase();
2222
}
2323

2424
public final String getString() {

src/main/java/xyz/webmc/originblacklist/base/http/OriginBlacklistRequestHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
import net.lax1dude.eaglercraft.backend.server.api.webserver.IRequestHandler;
99
import net.lax1dude.eaglercraft.backend.server.api.webserver.RouteDesc;
1010

11-
public class OriginBlacklistRequestHandler implements IRequestHandler {
11+
public final class OriginBlacklistRequestHandler implements IRequestHandler {
1212
private static final RouteDesc route = RouteDesc.create("/originblacklist/v2/");
1313
private final OriginBlacklist plugin;
1414

1515
public OriginBlacklistRequestHandler(final OriginBlacklist plugin) {
16-
this.plugin = plugin;
16+
this.plugin = plugin;
1717
}
1818

1919
@Override
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package xyz.webmc.originblacklist.base.metrics;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import org.bstats.charts.CustomChart;
7+
8+
public abstract class GenericMetricsAdapter {
9+
protected final List<CustomChart> charts;
10+
11+
protected GenericMetricsAdapter() {
12+
this.charts = new ArrayList<>();
13+
}
14+
15+
public final void addCustomChart(final CustomChart chart) {
16+
this.charts.add(chart);
17+
}
18+
19+
public abstract void start();
20+
public abstract void shutdown();
21+
}

src/main/java/xyz/webmc/originblacklist/base/util/IOriginBlacklistPlugin.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import xyz.webmc.originblacklist.base.enums.EnumLogLevel;
44
import xyz.webmc.originblacklist.base.events.OriginBlacklistLoginEvent;
55
import xyz.webmc.originblacklist.base.events.OriginBlacklistMOTDEvent;
6+
import xyz.webmc.originblacklist.base.metrics.GenericMetricsAdapter;
67

78
import java.nio.file.Path;
89
import java.util.concurrent.TimeUnit;
@@ -19,6 +20,8 @@ public interface IOriginBlacklistPlugin {
1920

2021
public Path getPluginJarPath();
2122

23+
public GenericMetricsAdapter getMetrics();
24+
2225
public IEaglerXServerAPI getEaglerAPI();
2326

2427
public void log(final EnumLogLevel level, final String txt);

src/main/java/xyz/webmc/originblacklist/base/util/OPlayer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public final int getPVN() {
8585
}
8686

8787
private static final String formatIPAddress(String addr) {
88-
if (OriginBlacklist.isNonNull(addr)) {
88+
if (OriginBlacklist.isNonNullStr(addr)) {
8989
if (addr.startsWith("/")) {
9090
addr = addr.substring(1);
9191
}

0 commit comments

Comments
 (0)