Skip to content

Commit 89311ee

Browse files
committed
eagler
1 parent 14ffd4e commit 89311ee

8 files changed

Lines changed: 94 additions & 37 deletions

File tree

build.gradle.kts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ import xyz.jpenilla.runvelocity.task.RunVelocity
1212

1313
val PLUGIN_NAME = "OriginBlacklist"
1414
val PLUGIN_IDEN = "originblacklist"
15-
val PLUGIN_DOMN = "xyz.webmc"
15+
val PLUGIN_DOMN = "xyz.webmc.$PLUGIN_IDEN"
1616
val PLUGIN_DESC = "An eaglercraft client blacklist plugin."
17-
val PLUGIN_VERS = "2.0.5"
17+
val PLUGIN_VERS = "2.0.6"
1818
val PLUGIN_SITE = "https://github.com/WebMCDevelopment/$PLUGIN_IDEN"
1919
val PLUGIN_DEPA = listOf("EaglercraftXServer")
2020
val PLUGIN_DEPB = listOf("EaglercraftXServer")
@@ -148,11 +148,11 @@ tasks.withType<ShadowJar>().configureEach {
148148
delete(layout.buildDirectory.dir("libs"))
149149
mkdir(layout.buildDirectory.dir("libs"))
150150
}
151-
relocate("inet.ipaddr", "$PLUGIN_DOMN.$PLUGIN_IDEN.shaded.ipaddress")
152-
relocate("de.marhali.json5", "$PLUGIN_DOMN.$PLUGIN_IDEN.shaded.json5")
153-
relocate("org.bstats", "$PLUGIN_DOMN.$PLUGIN_IDEN.shaded.bstats")
154-
relocate("org.semver4j.semver4j", "$PLUGIN_DOMN.$PLUGIN_IDEN.shaded.semver4j")
155-
// relocate("net.kyori.adventure", "$PLUGIN_DOMN.$PLUGIN_IDEN.shaded.adventure")
151+
relocate("inet.ipaddr", "$PLUGIN_DOMN.shaded.ipaddress")
152+
relocate("de.marhali.json5", "$PLUGIN_DOMN.shaded.json5")
153+
relocate("org.bstats", "$PLUGIN_DOMN.shaded.bstats")
154+
relocate("org.semver4j.semver4j", "$PLUGIN_DOMN.shaded.semver4j")
155+
// relocate("net.kyori.adventure", "$PLUGIN_DOMN.shaded.adventure")
156156
archiveFileName.set("$PLUGIN_NAME-$PLUGIN_VERS.jar")
157157
}
158158

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

Lines changed: 47 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import java.nio.file.Path;
2323
import java.nio.file.Paths;
2424
import java.nio.file.StandardCopyOption;
25+
import java.nio.file.StandardOpenOption;
26+
import java.time.Instant;
2527
import java.util.ArrayList;
2628
import java.util.Base64;
2729
import java.util.List;
@@ -36,15 +38,17 @@
3638
import net.kyori.adventure.text.Component;
3739
import net.kyori.adventure.text.minimessage.MiniMessage;
3840
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
39-
import net.lax1dude.eaglercraft.backend.server.api.EnumWebSocketHeader;
40-
import net.lax1dude.eaglercraft.backend.server.api.IEaglerLoginConnection;
4141
import net.lax1dude.eaglercraft.backend.server.api.query.IMOTDConnection;
4242
import org.semver4j.Semver;
4343

4444
public final class OriginBlacklist {
45+
private static final String COMMIT_L = BuildInfo.get("git_cm_hash");
46+
private static final String COMMIT_S = COMMIT_L.substring(0, 8);
47+
4548
public static final Semver REQUIRED_API_VER = new Semver("1.0.2");
4649
public static final String GENERIC_STR = "GENERIC";
4750
public static final String UNKNOWN_STR = "UNKNOWN";
51+
public static final String CENSORED_STR = "CENSORED";
4852
public static final String PLUGIN_REPO = "WebMCDevelopment/originblacklist";
4953
public static final int BSTATS_ID = 28776;
5054

@@ -56,7 +60,7 @@ public final class OriginBlacklist {
5660

5761
public OriginBlacklist(final IOriginBlacklistPlugin plugin) {
5862
this.plugin = plugin;
59-
this.config = new OriginBlacklistConfig(plugin);
63+
this.config = new OriginBlacklistConfig(this);
6064
this.http = new OriginBlacklistHTTPServer(this);
6165
this.json5 = Json5.builder(builder -> builder.prettyPrinting().indentFactor(0).build());
6266
plugin.scheduleRepeat(() -> {
@@ -66,7 +70,7 @@ public OriginBlacklist(final IOriginBlacklistPlugin plugin) {
6670

6771
public final void init() {
6872
this.plugin.log(EnumLogLevel.INFO, "Initialized Plugin");
69-
this.plugin.log(EnumLogLevel.DEBUG, "Commit " + BuildInfo.get("git_cm_hash"));
73+
this.plugin.log(EnumLogLevel.DEBUG, "Commit " + COMMIT_L);
7074
if (this.isHTTPServerEnabled()) {
7175
this.http.start();
7276
}
@@ -75,6 +79,7 @@ public final void init() {
7579
public final void shutdown() {
7680
this.plugin.log(EnumLogLevel.INFO, "Shutting down...");
7781
this.http.stop();
82+
this.plugin.shutdown();
7883
}
7984

8085
public final void handleReload() {
@@ -108,6 +113,7 @@ public final void handleLogin(final OriginBlacklistLoginEvent event) {
108113
final String name = player.getName();
109114
if (isNonNull(name)) {
110115
this.plugin.log(EnumLogLevel.INFO, "Prevented blacklisted player " + name + " from joining.");
116+
this.updateLogFile(event, blacklisted);
111117
}
112118
}
113119
}
@@ -138,6 +144,10 @@ public final boolean isMetricsEnabled() {
138144
return this.config.getBoolean("bStats");
139145
}
140146

147+
public final boolean isLogFileEnabled() {
148+
return this.config.getBoolean("logFile");
149+
}
150+
141151
public final boolean isHTTPServerEnabled() {
142152
return this.config.getBoolean("blacklist_http_share.enabled");
143153
}
@@ -317,6 +327,10 @@ public final String getBlacklistShare() {
317327
}
318328
}
319329

330+
public final String getDataDir() {
331+
return "plugins/" + plugin.getPluginId();
332+
}
333+
320334
private final Component getBlacklistedComponent(final String type, final String id, final String blockType,
321335
final String blockTypeAlt, final String notAllowed, final String notAllowedAlt, final String blockValue,
322336
final String action) {
@@ -341,25 +355,25 @@ private final void sendWebhooks(final OriginBlacklistLoginEvent event, final Enu
341355
if (this.config.getBoolean("discord.enabled")) {
342356
final OPlayer player = event.getPlayer();
343357
final EnumConnectionType connType = event.getConnectionType();
344-
final String userAgent;
358+
/* final String userAgent;
345359
if (connType == EnumConnectionType.EAGLER) {
346360
final IEaglerLoginConnection loginConn = event.getEaglerEvent().getLoginConnection();
347361
userAgent = loginConn.getWebSocketHeader(EnumWebSocketHeader.HEADER_USER_AGENT);
348362
} else {
349363
userAgent = UNKNOWN_STR;
350-
}
364+
} */
351365
final byte[] payload = String.format(
352366
"""
353367
{
354368
"content": "Blocked a blacklisted %s from joining",
355369
"embeds": [
356370
{
357371
"title": "-------- Player Information --------",
358-
"description": "**→ Name:** %s\\n**→ Origin:** %s\\n**→ Brand:** %s\\n**→ IP Address:** %s\\n**→ Protocol Version:** %s\\n**→ User Agent:** %s\\n**→ Rewind:** %s\\n**→ Player Type:** %s",
372+
"description": "**→ Name:** %s\\n**→ Origin:** %s\\n**→ Brand:** %s\\n**→ IP Address:** %s\\n**→ Protocol Version:** %s\\n**→ Host:** %s\\n**→ Rewind:** %s\\n**→ Player Type:** %s",
359373
"color": 15801922,
360374
"fields": [],
361375
"footer": {
362-
"text": "OriginBlacklist v%s",
376+
"text": "%s v%s",
363377
"icon_url": "https://raw.githubusercontent.com/%s/refs/heads/main/img/icon.png"
364378
}
365379
}
@@ -386,12 +400,14 @@ private final void sendWebhooks(final OriginBlacklistLoginEvent event, final Enu
386400
player.getName().replaceAll("_", "\\_"),
387401
player.getOrigin(),
388402
player.getBrand(),
389-
this.config.getBoolean("discord.send_ips") ? player.getAddr() : "*\\*CENSORED\\**",
403+
this.config.getBoolean("discord.send_ips") ? player.getAddr() : CENSORED_STR,
390404
player.getPVN(),
391-
userAgent,
405+
player.getVHost(),
406+
// userAgent,
392407
player.isRewind() ? "YES" : "NO",
393408
connType.toString(),
394-
this.plugin.getPluginVersion(),
409+
BuildInfo.get("plugin_name"),
410+
this.plugin.getPluginVersion() + " • " + COMMIT_S,
395411
PLUGIN_REPO,
396412
PLUGIN_REPO).getBytes();
397413
final Json5Array arr = this.config.get("discord.webhook_urls").getAsJson5Array();
@@ -435,6 +451,26 @@ private final void checkForUpdates() {
435451
});
436452
}
437453

454+
private final void updateLogFile(final OriginBlacklistLoginEvent event, final EnumBlacklistType type) {
455+
if (this.isLogFileEnabled()) {
456+
final OPlayer player = event.getPlayer();
457+
final String txt = Instant.now() + " - [player=" + player.getName() + "," + "blacklist_reason=" + type.toString() + "]";
458+
final Path dir = Paths.get(this.getDataDir());
459+
try {
460+
Files.createDirectories(dir);
461+
Files.writeString(
462+
dir.resolve("blacklist.log"),
463+
txt + "\n",
464+
StandardOpenOption.CREATE,
465+
StandardOpenOption.WRITE,
466+
StandardOpenOption.APPEND
467+
);
468+
} catch (final Throwable t) {
469+
t.printStackTrace();
470+
}
471+
}
472+
}
473+
438474
public static final String getComponentString(final Component comp) {
439475
return LegacyComponentSerializer.legacySection().serialize(comp);
440476
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ public final void usage(CommandContext ctx) {
156156
}
157157

158158
private final boolean isBlacklisted(final String str) {
159-
final OPlayer player = new OPlayer(null, str, null, str, str, -1);
159+
final OPlayer player = new OPlayer(null, str, null, str, str, null, -1);
160160
return this.plugin.testBlacklist(player) != EnumBlacklistType.NONE;
161161
}
162162
}

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,18 @@ public final class OriginBlacklistConfig {
3131
private byte[] icon;
3232
private String icon64;
3333

34-
public OriginBlacklistConfig(final IOriginBlacklistPlugin plugin) {
34+
public OriginBlacklistConfig(final OriginBlacklist plugin) {
3535
this.json5 = Json5.builder(builder -> builder
3636
.quoteless()
3737
.quoteSingle()
3838
.parseComments()
3939
.writeComments()
4040
.prettyPrinting()
4141
.build());
42-
final String dir = "plugins/" + plugin.getPluginId();
43-
this.file = new File(dir + "/config.json5");
42+
43+
this.file = new File(plugin.getDataDir() + "/config.json5");
4444
this.filePath = file.toPath();
45-
this.iconFile = new File(dir + "/blacklisted.png");
45+
this.iconFile = new File(plugin.getDataDir() + "/blacklisted.png");
4646
this.iconPath = iconFile.toPath();
4747
this.loadConfig();
4848
}
@@ -321,6 +321,7 @@ private static final Json5Object getDefaultConfig() {
321321
addJSONObj(obj, "blacklist_to_whitelist", Json5Primitive.fromBoolean(false), null);
322322
addJSONObj(obj, "block_undefined_origin", Json5Primitive.fromBoolean(false), null);
323323
addJSONObj(obj, "bStats", Json5Primitive.fromBoolean(true), null);
324+
addJSONObj(obj, "logFile", Json5Primitive.fromBoolean(true), null);
324325
addJSONObj(obj, "config_version", Json5Primitive.fromNumber(1), "DO NOT CHANGE");
325326
return obj;
326327
}

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,18 @@ public final class OPlayer {
1616
private final String name;
1717
private final UUID uuid;
1818
private final String brand;
19+
private final String vhost;
1920
private final boolean rewind;
2021
private final int pvn;
2122

2223
public OPlayer(final IEaglerConnection conn, final String name, final UUID uuid, final String addr,
23-
final String brand, final int pvn) {
24+
final String brand, final String vhost, final int pvn) {
2425
this.name = name;
2526
this.uuid = uuid;
2627
if (conn != null) {
2728
this.origin = conn.getWebSocketHeader(EnumWebSocketHeader.HEADER_ORIGIN);
2829
this.addr = formatSocketAddress(conn.getSocketAddress());
30+
this.vhost = conn.isWebSocketSecure() ? "wss://" : "ws://" + conn.getWebSocketHost();
2931
if (conn instanceof IEaglerLoginConnection) {
3032
final IEaglerLoginConnection loginConn = (IEaglerLoginConnection) conn;
3133
this.brand = loginConn.getEaglerBrandString();
@@ -40,13 +42,14 @@ public OPlayer(final IEaglerConnection conn, final String name, final UUID uuid,
4042
this.origin = OriginBlacklist.UNKNOWN_STR;
4143
this.addr = formatIPAddress(addr);
4244
this.brand = brand;
45+
this.vhost = vhost;
4346
this.rewind = false;
4447
this.pvn = pvn;
4548
}
4649
}
4750

4851
public OPlayer(final IEaglerConnection conn, final String name, final UUID uuid) {
49-
this(conn, name, uuid, null, null, -1);
52+
this(conn, name, uuid, null, null, null, -1);
5053
}
5154

5255
public final String getOrigin() {
@@ -69,6 +72,10 @@ public final String getBrand() {
6972
return this.brand;
7073
}
7174

75+
public final String getVHost() {
76+
return this.vhost;
77+
}
78+
7279
public final boolean isRewind() {
7380
return this.rewind;
7481
}

src/main/java/xyz/webmc/originblacklist/bukkit/OriginBlacklistBukkit.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,15 +112,13 @@ public final void onEaglerMOTD(final EaglercraftMOTDEvent event) {
112112

113113
@EventHandler(priority = EventPriority.LOWEST)
114114
public final void onJavaLogin(final AsyncPlayerPreLoginEvent event) {
115-
final OPlayer player = new OPlayer(null, event.getName(), event.getUniqueId(),
116-
event.getAddress() != null ? event.getAddress().toString() : null, OriginBlacklist.UNKNOWN_STR, -1);
115+
final OPlayer player = new OPlayer(null, event.getName(), event.getUniqueId(), event.getAddress().toString(), OriginBlacklist.UNKNOWN_STR, OriginBlacklist.UNKNOWN_STR, -1);
117116
this.blacklist.handleLogin(new OriginBlacklistLoginEvent(null, event, EnumConnectionType.JAVA, player));
118117
}
119118

120119
@EventHandler(priority = EventPriority.HIGHEST)
121120
public final void onJavaMOTD(final ServerListPingEvent event) {
122-
final OPlayer player = new OPlayer(null, null, null,
123-
event.getAddress() != null ? event.getAddress().toString() : null, null, -1);
121+
final OPlayer player = new OPlayer(null, null, null, event.getAddress().toString(), null, null, -1);
124122
this.blacklist.handleMOTD(new OriginBlacklistMOTDEvent(null, event, EnumConnectionType.JAVA, player));
125123
}
126124

src/main/java/xyz/webmc/originblacklist/bungee/OriginBlacklistBungee.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import xyz.webmc.originblacklist.base.util.OPlayer;
1111
import xyz.webmc.originblacklist.bungee.command.OriginBlacklistCommandBungee;
1212

13+
import java.net.InetSocketAddress;
1314
import java.nio.file.Path;
1415
import java.nio.file.Paths;
1516
import java.util.HashMap;
@@ -23,6 +24,7 @@
2324
import net.lax1dude.eaglercraft.backend.server.api.bungee.event.EaglercraftMOTDEvent;
2425
import net.md_5.bungee.api.ProxyServer;
2526
import net.md_5.bungee.api.ServerPing;
27+
import net.md_5.bungee.api.connection.PendingConnection;
2628
import net.md_5.bungee.api.connection.ProxiedPlayer;
2729
import net.md_5.bungee.api.event.PostLoginEvent;
2830
import net.md_5.bungee.api.event.PreLoginEvent;
@@ -108,21 +110,27 @@ public final void onEaglerMOTD(final EaglercraftMOTDEvent event) {
108110

109111
@EventHandler(priority = EventPriority.HIGHEST)
110112
public final void onJavaLogin(final PostLoginEvent event) {
113+
final PendingConnection conn = event.getPlayer().getPendingConnection();
114+
final InetSocketAddress vhost = conn.getVirtualHost();
111115
final ProxiedPlayer aPlayer = event.getPlayer();
112116
final OPlayer bPlayer = new OPlayer(null, aPlayer.getName(), aPlayer.getUniqueId(),
113-
aPlayer.getAddress().toString(), aPlayer.getClientBrand(), event.getPlayer().getPendingConnection().getVersion());
117+
aPlayer.getAddress().toString(), aPlayer.getClientBrand(), vhost.getHostString() + vhost.getPort(), conn.getVersion());
114118
this.blacklist.handleLogin(new OriginBlacklistLoginEvent(null, event, EnumConnectionType.JAVA, bPlayer));
115119
}
116120

117121
@EventHandler(priority = EventPriority.HIGHEST)
118122
public final void onJavaHandshake(final PreLoginEvent event) {
119-
final OPlayer player = new OPlayer(null, null, null, event.getConnection().getAddress().toString(), OriginBlacklist.UNKNOWN_STR, event.getConnection().getVersion());
123+
final PendingConnection conn = event.getConnection();
124+
final InetSocketAddress vhost = conn.getVirtualHost();
125+
final OPlayer player = new OPlayer(null, null, null, conn.getAddress().toString(), OriginBlacklist.UNKNOWN_STR, vhost.getHostString() + vhost.getPort(), conn.getVersion());
120126
this.blacklist.handleLogin(new OriginBlacklistLoginEvent(null, event, EnumConnectionType.JAVA, player));
121127
}
122128

123129
@EventHandler(priority = EventPriority.LOWEST)
124130
public final void onJavaMOTD(final ProxyPingEvent event) {
125-
final OPlayer player = new OPlayer(null, null, null, event.getConnection().getAddress().toString(), null, -1);
131+
final PendingConnection conn = event.getConnection();
132+
final InetSocketAddress vhost = conn.getVirtualHost();
133+
final OPlayer player = new OPlayer(null, null, null, conn.getAddress().toString(), null, vhost.getHostString() + vhost.getPort(), -1);
126134
this.blacklist.handleMOTD(new OriginBlacklistMOTDEvent(null, event, EnumConnectionType.JAVA, player));
127135
}
128136

src/main/java/xyz/webmc/originblacklist/velocity/OriginBlacklistVelocity.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import xyz.webmc.originblacklist.base.util.OPlayer;
1111
import xyz.webmc.originblacklist.velocity.command.OriginBlacklistCommandVelocity;
1212

13+
import java.net.InetSocketAddress;
1314
import java.nio.file.Path;
1415
import java.nio.file.Paths;
1516
import java.util.HashMap;
@@ -26,6 +27,7 @@
2627
import com.velocitypowered.api.event.proxy.ProxyPingEvent;
2728
import com.velocitypowered.api.event.proxy.ProxyShutdownEvent;
2829
import com.velocitypowered.api.plugin.PluginContainer;
30+
import com.velocitypowered.api.proxy.InboundConnection;
2931
import com.velocitypowered.api.proxy.Player;
3032
import com.velocitypowered.api.proxy.ProxyServer;
3133
import com.velocitypowered.api.proxy.server.ServerPing;
@@ -125,24 +127,29 @@ public final void onEaglerMOTD(final EaglercraftMOTDEvent event) {
125127

126128
@Subscribe(order = PostOrder.FIRST)
127129
public final void onJavaLogin(final PreLoginEvent event) {
130+
final InboundConnection conn = event.getConnection();
131+
final InetSocketAddress vhost = conn.getVirtualHost().orElseThrow();
128132
final OPlayer player = new OPlayer(null, event.getUsername(), event.getUniqueId(),
129-
event.getConnection().getRemoteAddress().toString(), OriginBlacklist.UNKNOWN_STR,
130-
event.getConnection().getProtocolVersion().getProtocol());
133+
conn.getRemoteAddress().toString(), OriginBlacklist.UNKNOWN_STR, vhost.getHostString() + vhost.getPort(),
134+
conn.getProtocolVersion().getProtocol());
131135
this.blacklist.handleLogin(new OriginBlacklistLoginEvent(null, event, EnumConnectionType.JAVA, player));
132136
}
133137

134138
@Subscribe(order = PostOrder.FIRST)
135139
public final void onJavaHandshake(final PlayerClientBrandEvent event) {
136-
final Player aPlayer = (Player) event.getPlayer();
140+
final InetSocketAddress vhost = event.getPlayer().getVirtualHost().orElseThrow();
141+
final Player aPlayer = event.getPlayer();
137142
final OPlayer bPlayer = new OPlayer(null, aPlayer.getUsername(), aPlayer.getUniqueId(),
138-
aPlayer.getRemoteAddress().getAddress().toString(), event.getBrand(),
143+
aPlayer.getRemoteAddress().getAddress().toString(), event.getBrand(), vhost.getHostString() + vhost.getPort(),
139144
event.getPlayer().getProtocolVersion().getProtocol());
140145
this.blacklist.handleLogin(new OriginBlacklistLoginEvent(null, event, EnumConnectionType.JAVA, bPlayer));
141146
}
142147

143148
@Subscribe(order = PostOrder.LAST)
144149
public final void onJavaMOTD(final ProxyPingEvent event) {
145-
final OPlayer player = new OPlayer(null, null, null, event.getConnection().getRemoteAddress().getHostString(),
150+
final InboundConnection conn = event.getConnection();
151+
final InetSocketAddress vhost = conn.getVirtualHost().orElseThrow();
152+
final OPlayer player = new OPlayer(null, null, null, conn.getRemoteAddress().getHostString(), vhost.getHostString() + vhost.getPort(),
146153
null, -1);
147154
this.blacklist.handleMOTD(new OriginBlacklistMOTDEvent(null, event, EnumConnectionType.JAVA, player));
148155
}

0 commit comments

Comments
 (0)