Compare commits

..

33 Commits

Author SHA1 Message Date
dependabot[bot]
4ead0f6308 Bump com.gradleup.shadow from 9.3.2 to 9.4.0 (#26)
Bumps [com.gradleup.shadow](https://github.com/GradleUp/shadow) from 9.3.2 to 9.4.0.
- [Release notes](https://github.com/GradleUp/shadow/releases)
- [Commits](https://github.com/GradleUp/shadow/compare/9.3.2...9.4.0)

---
updated-dependencies:
- dependency-name: com.gradleup.shadow
  dependency-version: 9.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-19 15:59:40 +00:00
dependabot[bot]
6510b5d1a6 Bump com.github.seancfoley:ipaddress from 5.6.1 to 5.6.2 (#25)
Bumps [com.github.seancfoley:ipaddress](https://github.com/seancfoley/IPAddress) from 5.6.1 to 5.6.2.
- [Release notes](https://github.com/seancfoley/IPAddress/releases)
- [Commits](https://github.com/seancfoley/IPAddress/compare/v5.6.1...v5.6.2)

---
updated-dependencies:
- dependency-name: com.github.seancfoley:ipaddress
  dependency-version: 5.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-19 15:58:57 +00:00
dependabot[bot]
a878374e97 Bump gradle-wrapper from 9.4.0 to 9.4.1 (#24)
Bumps gradle-wrapper from 9.4.0 to 9.4.1.

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-19 15:57:45 +00:00
Colbster937
f4ca0469fe Merge pull request #23 from WebMCDevelopment/dependabot/gradle/com.gradleup.shadow-9.3.2
Bump com.gradleup.shadow from 9.3.0 to 9.3.2
2026-03-07 13:02:35 -06:00
dependabot[bot]
b2d0d6afe9 Bump gradle-wrapper from 9.2.1 to 9.4.0 (#22)
Bumps gradle-wrapper from 9.2.1 to 9.4.0.

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-05 16:00:54 +00:00
dependabot[bot]
b9bf17abed Bump com.gradleup.shadow from 9.3.0 to 9.3.2
Bumps [com.gradleup.shadow](https://github.com/GradleUp/shadow) from 9.3.0 to 9.3.2.
- [Release notes](https://github.com/GradleUp/shadow/releases)
- [Commits](https://github.com/GradleUp/shadow/compare/9.3.0...9.3.2)

---
updated-dependencies:
- dependency-name: com.gradleup.shadow
  dependency-version: 9.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-05 16:00:48 +00:00
dependabot[bot]
df6c446b72 Bump org.bstats:bstats-bungeecord from 3.1.0 to 3.2.1 (#21)
Bumps [org.bstats:bstats-bungeecord](https://github.com/Bastian/bStats-Metrics) from 3.1.0 to 3.2.1.
- [Release notes](https://github.com/Bastian/bStats-Metrics/releases)
- [Commits](https://github.com/Bastian/bStats-Metrics/compare/v3.1.0...v3.2.1)

---
updated-dependencies:
- dependency-name: org.bstats:bstats-bungeecord
  dependency-version: 3.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-26 15:58:39 +00:00
dependabot[bot]
04d9de8ce4 Bump org.bstats:bstats-velocity from 3.1.0 to 3.2.1 (#20)
Bumps [org.bstats:bstats-velocity](https://github.com/Bastian/bStats-Metrics) from 3.1.0 to 3.2.1.
- [Release notes](https://github.com/Bastian/bStats-Metrics/releases)
- [Commits](https://github.com/Bastian/bStats-Metrics/compare/v3.1.0...v3.2.1)

---
updated-dependencies:
- dependency-name: org.bstats:bstats-velocity
  dependency-version: 3.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-26 15:58:07 +00:00
dependabot[bot]
98aa012267 Bump org.bstats:bstats-bukkit from 3.1.0 to 3.2.1 (#19)
Bumps [org.bstats:bstats-bukkit](https://github.com/Bastian/bStats-Metrics) from 3.1.0 to 3.2.1.
- [Release notes](https://github.com/Bastian/bStats-Metrics/releases)
- [Commits](https://github.com/Bastian/bStats-Metrics/compare/v3.1.0...v3.2.1)

---
updated-dependencies:
- dependency-name: org.bstats:bstats-bukkit
  dependency-version: 3.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-26 15:57:50 +00:00
Colbster937
b0fcff588b start on subscriptions 2026-02-17 17:21:34 -06:00
Colbster937
9b6bc94def Merge branch 'main' of https://github.com/WebMCDevelopment/originblacklist 2026-02-17 09:56:21 -06:00
Colbster937
4dd81995d5 disable auto updater 2026-02-17 09:56:14 -06:00
dependabot[bot]
41ce550089 Bump me.clip:placeholderapi from 2.12.1 to 2.12.2 (#18)
Bumps me.clip:placeholderapi from 2.12.1 to 2.12.2.

---
updated-dependencies:
- dependency-name: me.clip:placeholderapi
  dependency-version: 2.12.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 15:58:08 +00:00
Colbster937
745622fa36 update build.gradle.kts 2026-02-11 07:38:31 -06:00
Colbster937
e7343b557d Merge pull request #17 from Cirsius/main
fix NullPointerException when geyser dispatches ProxyPingEvent with a null virtual host
2026-02-11 07:34:52 -06:00
cirsius
47d451362b fix NullPointerException when geyser dispatches ProxyPingEvent with a null virtual host 2026-02-11 05:33:20 -06:00
Colbster937
f4261e0d6c update 2026-02-05 17:36:05 -06:00
Colbster937
b91b4f93e5 Merge branch 'main' of https://github.com/WebMCDevelopment/originblacklist 2026-02-05 13:36:28 -06:00
Colbster937
2e05fb6031 remove debug code 2026-02-05 13:36:23 -06:00
dependabot[bot]
a7ea336158 Bump com.github.seancfoley:ipaddress from 5.5.1 to 5.6.1 (#16)
Bumps [com.github.seancfoley:ipaddress](https://github.com/seancfoley/IPAddress) from 5.5.1 to 5.6.1.
- [Release notes](https://github.com/seancfoley/IPAddress/releases)
- [Commits](https://github.com/seancfoley/IPAddress/compare/v5.5.1...v5.6.1)

---
updated-dependencies:
- dependency-name: com.github.seancfoley:ipaddress
  dependency-version: 5.6.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-05 15:58:11 +00:00
dependabot[bot]
0a2c39fbd4 Bump me.clip:placeholderapi from 2.11.7 to 2.12.1 (#15)
Bumps me.clip:placeholderapi from 2.11.7 to 2.12.1.

---
updated-dependencies:
- dependency-name: me.clip:placeholderapi
  dependency-version: 2.12.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-05 15:57:56 +00:00
Colbster937
df17431df0 thing 2026-02-03 19:58:52 -06:00
Colbster937
2c0f084bb4 2.0.9 2026-01-30 12:28:51 -06:00
dependabot[bot]
c391ec3ad6 Bump com.velocitypowered:velocity-api (#14)
Bumps com.velocitypowered:velocity-api from 3.4.0-SNAPSHOT to 3.5.0-SNAPSHOT.

---
updated-dependencies:
- dependency-name: com.velocitypowered:velocity-api
  dependency-version: 3.5.0-SNAPSHOT
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-29 23:14:46 +00:00
Colbster937
ce7685367f update 2026-01-29 17:12:58 -06:00
Colbster937
bc16324342 Merge branch 'main' of https://github.com/WebMCDevelopment/originblacklist 2026-01-29 17:10:40 -06:00
Colbster937
f6cf685d1c update 2026-01-29 17:10:27 -06:00
dependabot[bot]
9b955ea77d Bump dependabot/fetch-metadata from 2.3.0 to 2.5.0 (#13)
Bumps [dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata) from 2.3.0 to 2.5.0.
- [Release notes](https://github.com/dependabot/fetch-metadata/releases)
- [Commits](d7267f607e...21025c705c)

---
updated-dependencies:
- dependency-name: dependabot/fetch-metadata
  dependency-version: 2.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-29 23:05:54 +00:00
Colbster937
f1fe503357 update 2026-01-29 17:03:00 -06:00
Colbster937
e315eeab24 update 2026-01-29 16:59:38 -06:00
Colbster937
c4dbe81de0 test dependabot 2026-01-29 16:52:03 -06:00
Colbster937
2883adc928 configure dependabot 2026-01-29 16:49:04 -06:00
Colbster937
00b1c99dc4 add more motd customization 2026-01-24 23:01:12 -06:00
45 changed files with 634 additions and 302 deletions

19
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,19 @@
version: 2
updates:
- package-ecosystem: "gradle"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major"]
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major"]

22
.github/workflows/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,22 @@
on:
pull_request:
permissions:
contents: write
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: github.event.pull_request.user.login == 'dependabot[bot]'
steps:
- id: metadata
uses: dependabot/fetch-metadata@21025c705c08248db411dc16f3619e6b5f9ea21a
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- if: steps.metadata.outputs.update-type != 'version-update:semver-major'
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -1,5 +1,3 @@
name: Build Plugin
on: on:
workflow_dispatch: workflow_dispatch:
push: push:

View File

@@ -24,6 +24,11 @@
- [x] Modular multi-platform support - [x] Modular multi-platform support
- [x] JSON5 based configuration - [x] JSON5 based configuration
<h2>Requirements</h2>
- Eagler(craft)XServer v1.0.2 or newer
- JDK 21 or newer
<h2>Download</h2> <h2>Download</h2>
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> 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>

View File

@@ -14,7 +14,7 @@ val PLUGIN_NAME = "OriginBlacklist"
val PLUGIN_IDEN = "originblacklist" val PLUGIN_IDEN = "originblacklist"
val PLUGIN_DOMN = "xyz.webmc.$PLUGIN_IDEN" val PLUGIN_DOMN = "xyz.webmc.$PLUGIN_IDEN"
val PLUGIN_DESC = "An eaglercraft client blacklist plugin." val PLUGIN_DESC = "An eaglercraft client blacklist plugin."
val PLUGIN_VERS = "2.0.7" val PLUGIN_VERS = "2.0.9"
val PLUGIN_SITE = "https://github.com/WebMCDevelopment/$PLUGIN_IDEN" val PLUGIN_SITE = "https://github.com/WebMCDevelopment/$PLUGIN_IDEN"
val PLUGIN_DEPA = listOf("EaglercraftXServer") val PLUGIN_DEPA = listOf("EaglercraftXServer")
val PLUGIN_DEPB = listOf("EaglercraftXServer") val PLUGIN_DEPB = listOf("EaglercraftXServer")
@@ -42,7 +42,7 @@ val EAGXS_VER = "1.0.8"
plugins { plugins {
id("java") id("java")
id("com.gradleup.shadow") version "9.3.1" id("com.gradleup.shadow") version "9.4.0"
id("com.palantir.git-version") version "4.2.0" id("com.palantir.git-version") version "4.2.0"
id("xyz.jpenilla.run-paper") version "3.0.2" id("xyz.jpenilla.run-paper") version "3.0.2"
id("xyz.jpenilla.run-waterfall") version "3.0.2" id("xyz.jpenilla.run-waterfall") version "3.0.2"
@@ -65,22 +65,22 @@ repositories {
} }
dependencies { dependencies {
compileOnly("com.velocitypowered:velocity-api:3.4.0-SNAPSHOT") compileOnly("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT")
compileOnly("org.bukkit:bukkit:1.8-R0.1-SNAPSHOT") compileOnly("org.bukkit:bukkit:1.8-R0.1-SNAPSHOT")
compileOnly("net.md-5:bungeecord-api:1.21-R0.5-SNAPSHOT") compileOnly("net.md-5:bungeecord-api:1.21-R0.5-SNAPSHOT")
compileOnly("net.lax1dude.eaglercraft.backend:api-velocity:1.0.0") compileOnly("net.lax1dude.eaglercraft.backend:api-velocity:1.0.0")
compileOnly("net.lax1dude.eaglercraft.backend:api-bungee:1.0.0") compileOnly("net.lax1dude.eaglercraft.backend:api-bungee:1.0.0")
compileOnly("net.lax1dude.eaglercraft.backend:api-bukkit:1.0.0") compileOnly("net.lax1dude.eaglercraft.backend:api-bukkit:1.0.0")
compileOnly("me.clip:placeholderapi:2.11.7") compileOnly("me.clip:placeholderapi:2.12.2")
compileOnly("net.william278:papiproxybridge:1.8.4") compileOnly("net.william278:papiproxybridge:1.8.4")
implementation("org.semver4j:semver4j:6.0.0") implementation("org.semver4j:semver4j:6.0.0")
implementation("de.marhali:json5-java:3.0.0") implementation("de.marhali:json5-java:3.0.0")
implementation("net.kyori:adventure-text-minimessage:4.26.1") implementation("net.kyori:adventure-text-minimessage:4.26.1")
implementation("net.kyori:adventure-text-serializer-legacy:4.26.1") implementation("net.kyori:adventure-text-serializer-legacy:4.26.1")
implementation("com.github.seancfoley:ipaddress:5.5.1") implementation("com.github.seancfoley:ipaddress:5.6.2")
implementation("org.bstats:bstats-bukkit:3.1.0") implementation("org.bstats:bstats-bukkit:3.2.1")
implementation("org.bstats:bstats-bungeecord:3.1.0") implementation("org.bstats:bstats-bungeecord:3.2.1")
implementation("org.bstats:bstats-velocity:3.1.0") implementation("org.bstats:bstats-velocity:3.2.1")
} }
sourceSets { sourceSets {
@@ -91,7 +91,7 @@ sourceSets {
} }
java { java {
toolchain.languageVersion.set(JavaLanguageVersion.of(17)) toolchain.languageVersion.set(JavaLanguageVersion.of(21))
} }
val BUILD_PROPS = mapOf( val BUILD_PROPS = mapOf(
@@ -111,12 +111,12 @@ val BUILD_PROPS = mapOf(
"git_cm_hash" to GIT_INFO.gitHashFull, "git_cm_hash" to GIT_INFO.gitHashFull,
) )
tasks.withType<JavaCompile>().configureEach { tasks.named<JavaCompile>("compileJava") {
options.encoding = "UTF-8" options.encoding = "UTF-8"
options.release.set(17) options.release.set(21)
} }
tasks.withType<ProcessResources>().configureEach { tasks.named<ProcessResources>("processResources") {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE duplicatesStrategy = DuplicatesStrategy.EXCLUDE
outputs.upToDateWhen { false } outputs.upToDateWhen { false }
@@ -139,11 +139,12 @@ tasks.withType<ProcessResources>().configureEach {
inputs.files(tasks.named<JavaCompile>("compileJava").map { it.outputs.files }) inputs.files(tasks.named<JavaCompile>("compileJava").map { it.outputs.files })
} }
tasks.withType<Jar>().configureEach { tasks.named<Jar>("jar") {
if (this !is ShadowJar) enabled = false enabled = false
} }
tasks.withType<ShadowJar>().configureEach { tasks.named<ShadowJar>("shadowJar") {
enabled = true
doFirst { doFirst {
delete(layout.buildDirectory.dir("libs")) delete(layout.buildDirectory.dir("libs"))
mkdir(layout.buildDirectory.dir("libs")) mkdir(layout.buildDirectory.dir("libs"))
@@ -168,17 +169,17 @@ tasks.register("printVars") {
} }
} }
tasks.withType<RunServer>().configureEach { tasks.named<RunServer>("runServer") {
minecraftVersion("1.12.2") minecraftVersion("1.12.2")
runDirectory.set(layout.projectDirectory.dir("run/paper")) runDirectory.set(layout.projectDirectory.dir("run/paper"))
jvmArgs("-Dcom.mojang.eula.agree=true") jvmArgs("-Dcom.mojang.eula.agree=true")
downloadPlugins { downloadPlugins {
github("lax1dude", "eaglerxserver", "v" + EAGXS_VER, "EaglerXServer.jar") github("lax1dude", "eaglerxserver", "v" + EAGXS_VER, "EaglerXServer.jar")
modrinth("placeholderapi", "2.11.7") modrinth("placeholderapi", "2.12.2")
} }
} }
tasks.withType<RunWaterfall>().configureEach { tasks.named<RunWaterfall>("runWaterfall") {
waterfallVersion("1.21") waterfallVersion("1.21")
runDirectory.set(layout.projectDirectory.dir("run/waterfall")) runDirectory.set(layout.projectDirectory.dir("run/waterfall"))
downloadPlugins { downloadPlugins {
@@ -186,8 +187,8 @@ tasks.withType<RunWaterfall>().configureEach {
} }
} }
tasks.withType<RunVelocity>().configureEach { tasks.named<RunVelocity>("runVelocity") {
velocityVersion("3.4.0-SNAPSHOT") velocityVersion("3.5.0-SNAPSHOT")
runDirectory.set(layout.projectDirectory.dir("run/velocity")) runDirectory.set(layout.projectDirectory.dir("run/velocity"))
downloadPlugins { downloadPlugins {
github("lax1dude", "eaglerxserver", "v" + EAGXS_VER, "EaglerXServer.jar") github("lax1dude", "eaglerxserver", "v" + EAGXS_VER, "EaglerXServer.jar")

View File

@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME

View File

@@ -1,8 +0,0 @@
package xyz.webmc.originblacklist.base.enums;
public enum EnumLogLevel {
INFO,
WARN,
ERROR,
DEBUG
}

View File

@@ -0,0 +1,36 @@
package xyz.webmc.originblacklist.bukkit;
import org.bstats.charts.CustomChart;
import xyz.webmc.originblacklist.core.OriginBlacklist;
import xyz.webmc.originblacklist.core.metrics.GenericMetricsAdapter;
import org.bstats.bukkit.Metrics;
public final class BukkitMetricsAdapter extends GenericMetricsAdapter {
private final OriginBlacklistBukkitPlugin plugin;
private Metrics metrics;
public BukkitMetricsAdapter(final OriginBlacklistBukkitPlugin plugin) {
super();
this.plugin = plugin;
}
@Override
public void start() {
if (this.metrics == null) {
this.metrics = new Metrics(this.plugin, OriginBlacklist.BSTATS.BUKKIT);
for (final CustomChart chart : this.charts) {
this.metrics.addCustomChart(chart);
}
}
}
@Override
public void shutdown() {
if (this.metrics != null) {
this.metrics.shutdown();
this.metrics = null;
}
}
}

View File

@@ -1,14 +1,14 @@
package xyz.webmc.originblacklist.bukkit; package xyz.webmc.originblacklist.bukkit;
import xyz.webmc.originblacklist.base.OriginBlacklist;
import xyz.webmc.originblacklist.base.enums.EnumConnectionType;
import xyz.webmc.originblacklist.base.enums.EnumLogLevel;
import xyz.webmc.originblacklist.base.events.OriginBlacklistLoginEvent;
import xyz.webmc.originblacklist.base.events.OriginBlacklistMOTDEvent;
import xyz.webmc.originblacklist.base.util.IOriginBlacklistPlugin;
import xyz.webmc.originblacklist.base.util.IncompatibleDependencyException;
import xyz.webmc.originblacklist.base.util.OPlayer;
import xyz.webmc.originblacklist.bukkit.command.OriginBlacklistCommandBukkit; import xyz.webmc.originblacklist.bukkit.command.OriginBlacklistCommandBukkit;
import xyz.webmc.originblacklist.core.OriginBlacklist;
import xyz.webmc.originblacklist.core.enums.EnumConnectionType;
import xyz.webmc.originblacklist.core.events.OriginBlacklistLoginEvent;
import xyz.webmc.originblacklist.core.events.OriginBlacklistMOTDEvent;
import xyz.webmc.originblacklist.core.logger.JavaLogger;
import xyz.webmc.originblacklist.core.util.IOriginBlacklistPlugin;
import xyz.webmc.originblacklist.core.util.IncompatibleDependencyException;
import xyz.webmc.originblacklist.core.util.OPlayer;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@@ -41,10 +41,11 @@ import org.bukkit.util.CachedServerIcon;
import org.semver4j.Semver; import org.semver4j.Semver;
@SuppressWarnings({ "rawtypes" }) @SuppressWarnings({ "rawtypes" })
public final class OriginBlacklistBukkit extends JavaPlugin implements Listener, IOriginBlacklistPlugin { public final class OriginBlacklistBukkitPlugin extends JavaPlugin implements Listener, IOriginBlacklistPlugin {
private boolean papiPlaceholdersEnabled; private boolean papiPlaceholdersEnabled;
private Object papi; private Object papi;
private OriginBlacklist blacklist; private OriginBlacklist blacklist;
private JavaLogger logger;
private Metrics metrics; private Metrics metrics;
private CachedServerIcon iconCache; private CachedServerIcon iconCache;
@@ -71,6 +72,7 @@ public final class OriginBlacklistBukkit extends JavaPlugin implements Listener,
} else { } else {
this.papi = null; this.papi = null;
} }
this.logger = new JavaLogger(this.getLogger());
this.blacklist = new OriginBlacklist(this); this.blacklist = new OriginBlacklist(this);
this.getCommand("originblacklist").setExecutor(new OriginBlacklistCommandBukkit(this.blacklist)); this.getCommand("originblacklist").setExecutor(new OriginBlacklistCommandBukkit(this.blacklist));
this.getServer().getPluginManager().registerEvents(this, this); this.getServer().getPluginManager().registerEvents(this, this);
@@ -136,24 +138,19 @@ public final class OriginBlacklistBukkit extends JavaPlugin implements Listener,
return Paths.get(this.getFile().getAbsolutePath()); return Paths.get(this.getFile().getAbsolutePath());
} }
@Override
public final BukkitMetricsAdapter getMetrics() {
return new BukkitMetricsAdapter(this);
}
@Override @Override
public final IEaglerXServerAPI getEaglerAPI() { public final IEaglerXServerAPI getEaglerAPI() {
return EaglerXServerAPI.instance(); return EaglerXServerAPI.instance();
} }
@Override @Override
public final void log(final EnumLogLevel level, final String txt) { public final JavaLogger getTheLogger() {
if (level == EnumLogLevel.WARN) { return this.logger;
this.getLogger().warning(txt);
} else if (level == EnumLogLevel.ERROR) {
this.getLogger().severe(txt);
} else if (level == EnumLogLevel.DEBUG) {
if (this.blacklist != null && this.blacklist.isDebugEnabled()) {
this.getLogger().info(txt);
}
} else {
this.getLogger().info(txt);
}
} }
@Override @Override
@@ -248,7 +245,6 @@ public final class OriginBlacklistBukkit extends JavaPlugin implements Listener,
@Override @Override
public final void shutdown() { public final void shutdown() {
this.metrics.shutdown();
Bukkit.getScheduler().cancelTasks(this); Bukkit.getScheduler().cancelTasks(this);
} }
} }

View File

@@ -1,7 +1,7 @@
package xyz.webmc.originblacklist.bukkit.command; package xyz.webmc.originblacklist.bukkit.command;
import xyz.webmc.originblacklist.base.OriginBlacklist; import xyz.webmc.originblacklist.core.OriginBlacklist;
import xyz.webmc.originblacklist.base.command.CommandContext; import xyz.webmc.originblacklist.core.command.CommandContext;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;

View File

@@ -1,7 +1,7 @@
package xyz.webmc.originblacklist.bukkit.command; package xyz.webmc.originblacklist.bukkit.command;
import xyz.webmc.originblacklist.base.OriginBlacklist; import xyz.webmc.originblacklist.core.OriginBlacklist;
import xyz.webmc.originblacklist.base.command.OriginBlacklistCommand; import xyz.webmc.originblacklist.core.command.OriginBlacklistCommand;
import java.util.List; import java.util.List;

View File

@@ -0,0 +1,36 @@
package xyz.webmc.originblacklist.bungee;
import org.bstats.charts.CustomChart;
import xyz.webmc.originblacklist.core.OriginBlacklist;
import xyz.webmc.originblacklist.core.metrics.GenericMetricsAdapter;
import org.bstats.bungeecord.Metrics;
public final class BungeeMetricsAdapter extends GenericMetricsAdapter {
private final OriginBlacklistBungeePlugin plugin;
private Metrics metrics;
public BungeeMetricsAdapter(final OriginBlacklistBungeePlugin plugin) {
super();
this.plugin = plugin;
}
@Override
public void start() {
if (this.metrics == null) {
this.metrics = new Metrics(this.plugin, OriginBlacklist.BSTATS.BUNGEE);
for (final CustomChart chart : this.charts) {
this.metrics.addCustomChart(chart);
}
}
}
@Override
public void shutdown() {
if (this.metrics != null) {
this.metrics.shutdown();
this.metrics = null;
}
}
}

View File

@@ -1,21 +1,19 @@
package xyz.webmc.originblacklist.bungee; package xyz.webmc.originblacklist.bungee;
import xyz.webmc.originblacklist.base.OriginBlacklist;
import xyz.webmc.originblacklist.base.enums.EnumConnectionType;
import xyz.webmc.originblacklist.base.enums.EnumLogLevel;
import xyz.webmc.originblacklist.base.events.OriginBlacklistLoginEvent;
import xyz.webmc.originblacklist.base.events.OriginBlacklistMOTDEvent;
import xyz.webmc.originblacklist.base.util.EaglerEventPriority;
import xyz.webmc.originblacklist.base.util.IOriginBlacklistPlugin;
import xyz.webmc.originblacklist.base.util.IncompatibleDependencyException;
import xyz.webmc.originblacklist.base.util.OPlayer;
import xyz.webmc.originblacklist.bungee.command.OriginBlacklistCommandBungee; import xyz.webmc.originblacklist.bungee.command.OriginBlacklistCommandBungee;
import xyz.webmc.originblacklist.core.OriginBlacklist;
import xyz.webmc.originblacklist.core.enums.EnumConnectionType;
import xyz.webmc.originblacklist.core.events.OriginBlacklistLoginEvent;
import xyz.webmc.originblacklist.core.events.OriginBlacklistMOTDEvent;
import xyz.webmc.originblacklist.core.logger.JavaLogger;
import xyz.webmc.originblacklist.core.util.EaglerEventPriority;
import xyz.webmc.originblacklist.core.util.IOriginBlacklistPlugin;
import xyz.webmc.originblacklist.core.util.IncompatibleDependencyException;
import xyz.webmc.originblacklist.core.util.OPlayer;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
@@ -34,17 +32,15 @@ import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventHandler;
import net.md_5.bungee.event.EventPriority; import net.md_5.bungee.event.EventPriority;
import org.bstats.bungeecord.Metrics;
import org.bstats.charts.AdvancedPie;
import org.semver4j.Semver; import org.semver4j.Semver;
@SuppressWarnings({ "deprecation", "rawtypes" }) @SuppressWarnings({ "deprecation", "rawtypes" })
public final class OriginBlacklistBungee extends Plugin implements Listener, IOriginBlacklistPlugin { public final class OriginBlacklistBungeePlugin extends Plugin implements Listener, IOriginBlacklistPlugin {
private ProxyServer proxy; private ProxyServer proxy;
private boolean papiPlaceholdersEnabled; private boolean papiPlaceholdersEnabled;
private Object papi; private Object papi;
private OriginBlacklist blacklist; private OriginBlacklist blacklist;
private Metrics metrics; private JavaLogger logger;
@Override @Override
public final void onEnable() { public final void onEnable() {
@@ -70,25 +66,12 @@ public final class OriginBlacklistBungee extends Plugin implements Listener, IOr
} else { } else {
this.papi = null; this.papi = null;
} }
this.logger = new JavaLogger(this.getLogger());
this.blacklist = new OriginBlacklist(this); this.blacklist = new OriginBlacklist(this);
this.getProxy().getPluginManager().registerCommand(this, this.getProxy().getPluginManager().registerCommand(this,
new OriginBlacklistCommandBungee(this, this.blacklist, "originblacklist")); new OriginBlacklistCommandBungee(this, this.blacklist, "originblacklist"));
this.getProxy().getPluginManager().registerListener(this, this); this.getProxy().getPluginManager().registerListener(this, this);
this.blacklist.init(); this.blacklist.init();
if (this.blacklist.isMetricsEnabled()) {
this.metrics = new Metrics(this, OriginBlacklist.BSTATS.BUNGEE);
this.metrics.addCustomChart(new AdvancedPie("player_types", () -> {
final Map<String, Integer> playerMap = new HashMap<>();
for (final ProxiedPlayer player : this.proxy.getPlayers()) {
final boolean eagler = this.getEaglerAPI().isEaglerPlayerByUUID(player.getUniqueId());
final String key = eagler ? "Eagler" : "Java";
playerMap.put(key, playerMap.getOrDefault(key, 0) + 1);
}
return playerMap;
}));
}
} }
@Override @Override
@@ -113,8 +96,9 @@ public final class OriginBlacklistBungee extends Plugin implements Listener, IOr
final PendingConnection conn = event.getPlayer().getPendingConnection(); final PendingConnection conn = event.getPlayer().getPendingConnection();
final InetSocketAddress vhost = conn.getVirtualHost(); final InetSocketAddress vhost = conn.getVirtualHost();
final ProxiedPlayer aPlayer = event.getPlayer(); final ProxiedPlayer aPlayer = event.getPlayer();
final String origin = vhost != null ? vhost.getHostString() + vhost.getPort() : OriginBlacklist.UNKNOWN_STR;
final OPlayer bPlayer = new OPlayer(null, aPlayer.getName(), aPlayer.getUniqueId(), final OPlayer bPlayer = new OPlayer(null, aPlayer.getName(), aPlayer.getUniqueId(),
aPlayer.getAddress().toString(), aPlayer.getClientBrand(), vhost.getHostString() + vhost.getPort(), aPlayer.getAddress().toString(), aPlayer.getClientBrand(), origin,
conn.getVersion()); conn.getVersion());
this.blacklist.handleLogin(new OriginBlacklistLoginEvent(null, event, EnumConnectionType.JAVA, bPlayer)); this.blacklist.handleLogin(new OriginBlacklistLoginEvent(null, event, EnumConnectionType.JAVA, bPlayer));
} }
@@ -123,8 +107,9 @@ public final class OriginBlacklistBungee extends Plugin implements Listener, IOr
public final void onJavaHandshake(final PreLoginEvent event) { public final void onJavaHandshake(final PreLoginEvent event) {
final PendingConnection conn = event.getConnection(); final PendingConnection conn = event.getConnection();
final InetSocketAddress vhost = conn.getVirtualHost(); final InetSocketAddress vhost = conn.getVirtualHost();
final String origin = vhost != null ? vhost.getHostString() + vhost.getPort() : OriginBlacklist.UNKNOWN_STR;
final OPlayer player = new OPlayer(null, null, null, conn.getAddress().toString(), OriginBlacklist.UNKNOWN_STR, final OPlayer player = new OPlayer(null, null, null, conn.getAddress().toString(), OriginBlacklist.UNKNOWN_STR,
vhost.getHostString() + vhost.getPort(), conn.getVersion()); origin, conn.getVersion());
this.blacklist.handleLogin(new OriginBlacklistLoginEvent(null, event, EnumConnectionType.JAVA, player)); this.blacklist.handleLogin(new OriginBlacklistLoginEvent(null, event, EnumConnectionType.JAVA, player));
} }
@@ -132,8 +117,9 @@ public final class OriginBlacklistBungee extends Plugin implements Listener, IOr
public final void onJavaMOTD(final ProxyPingEvent event) { public final void onJavaMOTD(final ProxyPingEvent event) {
final PendingConnection conn = event.getConnection(); final PendingConnection conn = event.getConnection();
final InetSocketAddress vhost = conn.getVirtualHost(); final InetSocketAddress vhost = conn.getVirtualHost();
final String origin = vhost != null ? vhost.getHostString() + vhost.getPort() : OriginBlacklist.UNKNOWN_STR;
final OPlayer player = new OPlayer(null, null, null, conn.getAddress().toString(), null, final OPlayer player = new OPlayer(null, null, null, conn.getAddress().toString(), null,
vhost.getHostString() + vhost.getPort(), -1); origin, -1);
this.blacklist.handleMOTD(new OriginBlacklistMOTDEvent(null, event, EnumConnectionType.JAVA, player)); this.blacklist.handleMOTD(new OriginBlacklistMOTDEvent(null, event, EnumConnectionType.JAVA, player));
} }
@@ -152,24 +138,19 @@ public final class OriginBlacklistBungee extends Plugin implements Listener, IOr
return Paths.get(this.getFile().getAbsolutePath()); return Paths.get(this.getFile().getAbsolutePath());
} }
@Override
public final BungeeMetricsAdapter getMetrics() {
return new BungeeMetricsAdapter(this);
}
@Override @Override
public final IEaglerXServerAPI getEaglerAPI() { public final IEaglerXServerAPI getEaglerAPI() {
return EaglerXServerAPI.instance(); return EaglerXServerAPI.instance();
} }
@Override @Override
public final void log(final EnumLogLevel level, final String txt) { public final JavaLogger getTheLogger() {
if (level == EnumLogLevel.WARN) { return this.logger;
this.getLogger().warning(txt);
} else if (level == EnumLogLevel.ERROR) {
this.getLogger().severe(txt);
} else if (level == EnumLogLevel.DEBUG) {
if (this.blacklist != null && this.blacklist.isDebugEnabled()) {
this.getLogger().info(txt);
}
} else {
this.getLogger().info(txt);
}
} }
@Override @Override
@@ -226,7 +207,6 @@ public final class OriginBlacklistBungee extends Plugin implements Listener, IOr
@Override @Override
public final void shutdown() { public final void shutdown() {
this.metrics.shutdown();
this.proxy.getScheduler().cancel(this); this.proxy.getScheduler().cancel(this);
} }
} }

View File

@@ -1,7 +1,7 @@
package xyz.webmc.originblacklist.bungee.command; package xyz.webmc.originblacklist.bungee.command;
import xyz.webmc.originblacklist.base.OriginBlacklist; import xyz.webmc.originblacklist.core.OriginBlacklist;
import xyz.webmc.originblacklist.base.command.CommandContext; import xyz.webmc.originblacklist.core.command.CommandContext;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.TextComponent;

View File

@@ -1,8 +1,8 @@
package xyz.webmc.originblacklist.bungee.command; package xyz.webmc.originblacklist.bungee.command;
import xyz.webmc.originblacklist.base.OriginBlacklist; import xyz.webmc.originblacklist.bungee.OriginBlacklistBungeePlugin;
import xyz.webmc.originblacklist.base.command.OriginBlacklistCommand; import xyz.webmc.originblacklist.core.OriginBlacklist;
import xyz.webmc.originblacklist.bungee.OriginBlacklistBungee; import xyz.webmc.originblacklist.core.command.OriginBlacklistCommand;
import java.util.List; import java.util.List;
@@ -14,7 +14,7 @@ public final class OriginBlacklistCommandBungee extends Command implements TabEx
private final OriginBlacklistCommand cmd; private final OriginBlacklistCommand cmd;
private final OriginBlacklist blacklist; private final OriginBlacklist blacklist;
public OriginBlacklistCommandBungee(final OriginBlacklistBungee plugin, final OriginBlacklist blacklist, public OriginBlacklistCommandBungee(final OriginBlacklistBungeePlugin plugin, final OriginBlacklist blacklist,
final String command) { final String command) {
super(command); super(command);
this.cmd = new OriginBlacklistCommand(blacklist); this.cmd = new OriginBlacklistCommand(blacklist);

View File

@@ -1,20 +1,22 @@
package xyz.webmc.originblacklist.base; package xyz.webmc.originblacklist.core;
import xyz.webmc.originblacklist.base.config.OriginBlacklistConfig; import xyz.webmc.originblacklist.core.config.OriginBlacklistConfig;
import xyz.webmc.originblacklist.base.enums.EnumBlacklistType; import xyz.webmc.originblacklist.core.enums.EnumBlacklistType;
import xyz.webmc.originblacklist.base.enums.EnumConnectionType; import xyz.webmc.originblacklist.core.enums.EnumConnectionType;
import xyz.webmc.originblacklist.base.enums.EnumLogLevel; import xyz.webmc.originblacklist.core.events.OriginBlacklistLoginEvent;
import xyz.webmc.originblacklist.base.events.OriginBlacklistLoginEvent; import xyz.webmc.originblacklist.core.events.OriginBlacklistMOTDEvent;
import xyz.webmc.originblacklist.base.events.OriginBlacklistMOTDEvent; import xyz.webmc.originblacklist.core.http.OriginBlacklistRequestHandler;
import xyz.webmc.originblacklist.base.http.OriginBlacklistRequestHandler; import xyz.webmc.originblacklist.core.logger.AbstractLogger;
import xyz.webmc.originblacklist.base.util.BuildInfo; import xyz.webmc.originblacklist.core.metrics.GenericMetricsAdapter;
import xyz.webmc.originblacklist.base.util.IOriginBlacklistPlugin; import xyz.webmc.originblacklist.core.util.BuildInfo;
import xyz.webmc.originblacklist.base.util.OPlayer; import xyz.webmc.originblacklist.core.util.IOriginBlacklistPlugin;
import xyz.webmc.originblacklist.base.util.UpdateChecker; import xyz.webmc.originblacklist.core.util.OPlayer;
import xyz.webmc.originblacklist.core.util.UpdateChecker;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL; import java.net.URL;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
@@ -23,10 +25,13 @@ import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.nio.file.StandardCopyOption; import java.nio.file.StandardCopyOption;
import java.nio.file.StandardOpenOption; import java.nio.file.StandardOpenOption;
import java.security.MessageDigest;
import java.time.Instant; import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Base64; import java.util.Base64;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import de.marhali.json5.Json5; import de.marhali.json5.Json5;
@@ -38,11 +43,14 @@ import inet.ipaddr.IPAddressString;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import net.lax1dude.eaglercraft.backend.server.api.IBasePlayer;
import net.lax1dude.eaglercraft.backend.server.api.IEaglerPlayer;
import net.lax1dude.eaglercraft.backend.server.api.IEaglerXServerAPI; import net.lax1dude.eaglercraft.backend.server.api.IEaglerXServerAPI;
import net.lax1dude.eaglercraft.backend.server.api.query.IMOTDConnection; import net.lax1dude.eaglercraft.backend.server.api.query.IMOTDConnection;
import org.bstats.charts.AdvancedPie;
import org.semver4j.Semver; import org.semver4j.Semver;
@SuppressWarnings({ "rawtypes" }) @SuppressWarnings({ "rawtypes", "unused" })
public final class OriginBlacklist { public final class OriginBlacklist {
private static final String COMMIT_L = BuildInfo.get("git_cm_hash"); private static final String COMMIT_L = BuildInfo.get("git_cm_hash");
private static final String COMMIT_S = COMMIT_L.substring(0, 8); private static final String COMMIT_S = COMMIT_L.substring(0, 8);
@@ -55,6 +63,8 @@ public final class OriginBlacklist {
private final IOriginBlacklistPlugin plugin; private final IOriginBlacklistPlugin plugin;
private final OriginBlacklistConfig config; private final OriginBlacklistConfig config;
private final GenericMetricsAdapter metrics;
private final AbstractLogger logger;
private final Json5 json5; private final Json5 json5;
private String updateURL; private String updateURL;
private Path jarFile; private Path jarFile;
@@ -62,26 +72,43 @@ public final class OriginBlacklist {
public OriginBlacklist(final IOriginBlacklistPlugin plugin) { public OriginBlacklist(final IOriginBlacklistPlugin plugin) {
this.plugin = plugin; this.plugin = plugin;
this.config = new OriginBlacklistConfig(this); this.config = new OriginBlacklistConfig(this);
this.metrics = plugin.getMetrics();
this.logger = plugin.getTheLogger().setPlugin(this);
;
this.json5 = Json5.builder(builder -> builder.prettyPrinting().indentFactor(0).build()); this.json5 = Json5.builder(builder -> builder.prettyPrinting().indentFactor(0).build());
} }
public final void init() { public final void init() {
this.jarFile = this.plugin.getPluginJarPath(); this.jarFile = this.plugin.getPluginJarPath();
this.plugin.scheduleRepeat(() -> { this.plugin.scheduleRepeat(this::repeatTick, 3600, TimeUnit.SECONDS);
this.checkForUpdates();
}, this.config.getInteger("update_checker.check_timer"), TimeUnit.SECONDS);
if (this.isBlacklistAPIEnabled()) { if (this.isBlacklistAPIEnabled()) {
OriginBlacklistRequestHandler.register(this); OriginBlacklistRequestHandler.register(this);
} }
this.plugin.log(EnumLogLevel.INFO, "Initialized Plugin"); this.metrics.addCustomChart(new AdvancedPie("player_types", () -> {
this.plugin.log(EnumLogLevel.DEBUG, "Commit " + COMMIT_L); final Map<String, Integer> playerMap = new HashMap<>();
for (final Object player : this.getEaglerAPI().getAllPlayers()) {
if (player instanceof IBasePlayer bPlayer) {
final String key = (bPlayer instanceof IEaglerPlayer) ? "Eagler" : "Java";
playerMap.put(key, playerMap.getOrDefault(key, 0) + 1);
}
}
return playerMap;
}));
this.logger.info("Initialized Plugin");
this.logger.debug("Commit " + COMMIT_L);
if (this.isMetricsEnabled()) {
this.metrics.start();
}
} }
public final void shutdown() { public final void shutdown() {
this.plugin.log(EnumLogLevel.INFO, "Shutting down..."); this.logger.info("Shutting down...");
if (this.isBlacklistAPIEnabled()) { if (this.isBlacklistAPIEnabled()) {
OriginBlacklistRequestHandler.unRegister(this); OriginBlacklistRequestHandler.unRegister(this);
} }
if (this.isMetricsEnabled()) {
this.metrics.shutdown();
}
this.plugin.shutdown(); this.plugin.shutdown();
} }
@@ -94,6 +121,14 @@ public final class OriginBlacklist {
} }
} catch (final Throwable t) { } catch (final Throwable t) {
} }
try {
if (this.isMetricsEnabled()) {
this.metrics.start();
} else {
this.metrics.shutdown();
}
} catch (final Throwable t) {
}
} }
public final void handleLogin(final OriginBlacklistLoginEvent event) { public final void handleLogin(final OriginBlacklistLoginEvent event) {
@@ -114,11 +149,11 @@ public final class OriginBlacklist {
} }
this.plugin.kickPlayer(this.getBlacklistedComponent("kick", blacklisted.getArrayString(), this.plugin.kickPlayer(this.getBlacklistedComponent("kick", blacklisted.getArrayString(),
blacklisted.getAltString(), blacklisted.getString(), "not allowed", "not allowed on the server", blacklisted.getAltString(), blacklisted.getString(), "not allowed", "not allowed on the server",
blacklisted_value, blacklisted.getActionString()), event); blacklisted_value, blacklisted.getActionString(), false), event);
this.sendWebhooks(event, blacklisted); this.sendWebhooks(event, blacklisted);
final String name = player.getName(); final String name = player.getName();
if (isNonNull(name)) { if (isNonNullStr(name)) {
this.plugin.log(EnumLogLevel.INFO, "Prevented blacklisted player " + name + " from joining."); this.logger.info("Prevented blacklisted player " + name + " from joining.");
this.updateLogFile(event, blacklisted); this.updateLogFile(event, blacklisted);
} }
} }
@@ -136,9 +171,12 @@ public final class OriginBlacklist {
} else { } else {
blacklisted_value = UNKNOWN_STR; blacklisted_value = UNKNOWN_STR;
} }
this.plugin.setMOTD(this.getBlacklistedComponent("motd", blacklisted.getArrayString(), blacklisted.getAltString(), if (this.isMOTDEnabled()) {
blacklisted.getString(), "blacklisted", "blacklisted from the server", blacklisted_value, this.plugin
blacklisted.getActionString()), event); .setMOTD(this.getBlacklistedComponent("motd", blacklisted.getArrayString(), blacklisted.getAltString(),
blacklisted.getString(), "blacklisted", "blacklisted from the server", blacklisted_value,
blacklisted.getActionString(), true), event);
}
} }
} }
@@ -150,6 +188,14 @@ public final class OriginBlacklist {
return this.config.getBoolean("bStats"); return this.config.getBoolean("bStats");
} }
public final boolean isMOTDEnabled() {
return this.config.getBoolean("motd.enabled");
}
public final boolean isWebhooksEnabled() {
return this.config.getBoolean("discord.webhook.enabled");
}
public final boolean isLogFileEnabled() { public final boolean isLogFileEnabled() {
return this.config.getBoolean("logFile"); return this.config.getBoolean("logFile");
} }
@@ -165,13 +211,18 @@ public final class OriginBlacklist {
public final void setEaglerMOTD(final Component comp, final OriginBlacklistMOTDEvent event) { public final void setEaglerMOTD(final Component comp, final OriginBlacklistMOTDEvent event) {
final IMOTDConnection conn = event.getEaglerEvent().getMOTDConnection(); final IMOTDConnection conn = event.getEaglerEvent().getMOTDConnection();
final List<String> lst = new ArrayList<>(); final List<String> lst = new ArrayList<>();
for (String ln : getComponentString(comp).split("\n")) { for (final String ln : getComponentString(comp).split("\n")) {
lst.add(ln); lst.add(ln);
} }
final List<String> pLst = new ArrayList<>();
for (final Json5Element ln : this.config.getArray("motd.players.hover").getAsJson5Array()) {
pLst.add(getLegacyFromMiniMessage(
ln.getAsString().replaceAll("%discord_invite%", this.config.getString("discord.invite"))));
}
conn.setServerMOTD(lst); conn.setServerMOTD(lst);
conn.setPlayerTotal(0); conn.setPlayerTotal(this.config.getInteger("motd.players.online"));
conn.setPlayerUnlimited(); conn.setPlayerMax(this.config.getInteger("motd.players.max"));
conn.setPlayerList(List.of()); conn.setPlayerList(pLst);
conn.setServerIcon(this.config.getIconBytes()); conn.setServerIcon(this.config.getIconBytes());
conn.sendToUser(); conn.sendToUser();
conn.disconnect(); conn.disconnect();
@@ -182,11 +233,11 @@ public final class OriginBlacklist {
this.plugin.runAsync(() -> { this.plugin.runAsync(() -> {
this.updateURL = UpdateChecker.checkForUpdates(PLUGIN_REPO, this.plugin.getPluginVersion(), this.updateURL = UpdateChecker.checkForUpdates(PLUGIN_REPO, this.plugin.getPluginVersion(),
this.config.getBoolean("update_checker.allow_snapshots")); this.config.getBoolean("update_checker.allow_snapshots"));
if (isNonNull((this.updateURL))) { if (isNonNullStr((this.updateURL))) {
action1.run(); action1.run();
return; } else {
action2.run();
} }
action2.run();
}); });
} else { } else {
action2.run(); action2.run();
@@ -195,7 +246,7 @@ public final class OriginBlacklist {
public final void updatePlugin(final Runnable action1, final Runnable action2) { public final void updatePlugin(final Runnable action1, final Runnable action2) {
try { try {
final URL url = new URL(this.updateURL); final URL url = (new URI(this.updateURL)).toURL();
final Path jar = this.jarFile; final Path jar = this.jarFile;
final Path bak = jar.resolveSibling(jar.getFileName().toString() + ".bak"); final Path bak = jar.resolveSibling(jar.getFileName().toString() + ".bak");
final Path upd = jar final Path upd = jar
@@ -219,14 +270,16 @@ public final class OriginBlacklist {
} finally { } finally {
conn.disconnect(); conn.disconnect();
} }
Files.delete(jar); if (Files.exists(upd)) {
Files.delete(bak); Files.delete(jar);
this.jarFile = upd; Files.delete(bak);
action1.run(); this.jarFile = upd;
return; action1.run();
return;
}
} catch (final Throwable t) { } catch (final Throwable t) {
t.printStackTrace();
Files.move(bak, jar, StandardCopyOption.REPLACE_EXISTING); Files.move(bak, jar, StandardCopyOption.REPLACE_EXISTING);
throw t;
} }
} catch (final Throwable t) { } catch (final Throwable t) {
t.printStackTrace(); t.printStackTrace();
@@ -249,7 +302,7 @@ public final class OriginBlacklist {
final boolean whitelist = this.config.getBoolean("blacklist_to_whitelist"); final boolean whitelist = this.config.getBoolean("blacklist_to_whitelist");
EnumBlacklistType type = EnumBlacklistType.NONE; EnumBlacklistType type = EnumBlacklistType.NONE;
if (isNonNull(origin)) { if (isNonNullStr(origin)) {
if (whitelist && !type.isBlacklisted()) if (whitelist && !type.isBlacklisted())
type = EnumBlacklistType.ORIGIN; type = EnumBlacklistType.ORIGIN;
for (final Json5Element element : this.config.getArray("blacklist.origins").getAsJson5Array()) { for (final Json5Element element : this.config.getArray("blacklist.origins").getAsJson5Array()) {
@@ -265,7 +318,7 @@ public final class OriginBlacklist {
return whitelist ? EnumBlacklistType.NONE : EnumBlacklistType.ORIGIN; return whitelist ? EnumBlacklistType.NONE : EnumBlacklistType.ORIGIN;
} }
if (isNonNull(brand)) { if (isNonNullStr(brand)) {
if (whitelist && !type.isBlacklisted()) if (whitelist && !type.isBlacklisted())
type = EnumBlacklistType.BRAND; type = EnumBlacklistType.BRAND;
for (final Json5Element element : this.config.getArray("blacklist.brands")) { for (final Json5Element element : this.config.getArray("blacklist.brands")) {
@@ -279,7 +332,7 @@ public final class OriginBlacklist {
} }
} }
if (isNonNull(name)) { if (isNonNullStr(name)) {
if (whitelist && !type.isBlacklisted()) if (whitelist && !type.isBlacklisted())
type = EnumBlacklistType.NAME; type = EnumBlacklistType.NAME;
for (final Json5Element element : this.config.getArray("blacklist.player_names")) { for (final Json5Element element : this.config.getArray("blacklist.player_names")) {
@@ -293,7 +346,7 @@ public final class OriginBlacklist {
} }
} }
if (isNonNull(addr)) { if (isNonNullStr(addr)) {
if (whitelist && !type.isBlacklisted()) if (whitelist && !type.isBlacklisted())
type = EnumBlacklistType.ADDR; type = EnumBlacklistType.ADDR;
for (final Json5Element element : this.config.getArray("blacklist.ip_addresses")) { for (final Json5Element element : this.config.getArray("blacklist.ip_addresses")) {
@@ -319,8 +372,7 @@ public final class OriginBlacklist {
public final String getBlacklistShare() { public final String getBlacklistShare() {
try { try {
final Json5Object obj = new Json5Object(); final Json5Object obj = new Json5Object();
obj.addProperty("plugin_version", this.plugin.getPluginVersion().getVersion()); obj.addProperty("plugin_version", this.plugin.getPluginVersion().getVersion() + "+" + COMMIT_S);
obj.addProperty("git_commit", COMMIT_L);
obj.addProperty("blacklist_to_whitelist", this.config.getBoolean("blacklist_to_whitelist")); obj.addProperty("blacklist_to_whitelist", this.config.getBoolean("blacklist_to_whitelist"));
obj.addProperty("block_undefined_origin", this.config.getBoolean("block_undefined_origin")); obj.addProperty("block_undefined_origin", this.config.getBoolean("block_undefined_origin"));
final Json5Object bObj = new Json5Object(); final Json5Object bObj = new Json5Object();
@@ -336,7 +388,7 @@ public final class OriginBlacklist {
} }
public final String getDataDir() { public final String getDataDir() {
return "plugins/" + plugin.getPluginId(); return "plugins/" + this.plugin.getPluginId();
} }
public final IEaglerXServerAPI getEaglerAPI() { public final IEaglerXServerAPI getEaglerAPI() {
@@ -345,8 +397,8 @@ public final class OriginBlacklist {
private final Component getBlacklistedComponent(final String type, final String id, final String blockType, private final Component getBlacklistedComponent(final String type, final String id, final String blockType,
final String blockTypeAlt, final String notAllowed, final String notAllowedAlt, final String blockValue, final String blockTypeAlt, final String notAllowed, final String notAllowedAlt, final String blockValue,
final String action) { final String action, final boolean isMOTD) {
final Json5Array arr = this.config.getArray("messages." + type); final Json5Array arr = this.config.getArray(isMOTD ? (type + ".text") : ("messages." + type));
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.size(); i++) { for (int i = 0; i < arr.size(); i++) {
if (i > 0) if (i > 0)
@@ -359,21 +411,26 @@ public final class OriginBlacklist {
.replaceAll("%block_type%", blockType) .replaceAll("%block_type%", blockType)
.replaceAll("%not_allowed%", notAllowed) .replaceAll("%not_allowed%", notAllowed)
.replaceAll("%not_allowed_alt%", notAllowedAlt) .replaceAll("%not_allowed_alt%", notAllowedAlt)
.replaceAll("%blocked_value%", blockValue); .replaceAll("%blocked_value%", blockValue)
.replaceAll("%discord_invite%", this.config.getString("discord.invite"));
return MiniMessage.miniMessage().deserialize(str); return MiniMessage.miniMessage().deserialize(str);
} }
private final void sendWebhooks(final OriginBlacklistLoginEvent event, final EnumBlacklistType type) { private final void sendWebhooks(final OriginBlacklistLoginEvent event, final EnumBlacklistType type) {
if (this.config.getBoolean("discord.enabled")) { if (this.isWebhooksEnabled()) {
final OPlayer player = event.getPlayer(); final OPlayer player = event.getPlayer();
final EnumConnectionType connType = event.getConnectionType(); final EnumConnectionType connType = event.getConnectionType();
/* final String userAgent; /*
if (connType == EnumConnectionType.EAGLER) { * final String userAgent;
final IEaglerLoginConnection loginConn = event.getEaglerEvent().getLoginConnection(); * if (connType == EnumConnectionType.EAGLER) {
userAgent = loginConn.getWebSocketHeader(EnumWebSocketHeader.HEADER_USER_AGENT); * final IEaglerLoginConnection loginConn =
} else { * event.getEaglerEvent().getLoginConnection();
userAgent = UNKNOWN_STR; * userAgent =
} */ * loginConn.getWebSocketHeader(EnumWebSocketHeader.HEADER_USER_AGENT);
* } else {
* userAgent = UNKNOWN_STR;
* }
*/
final byte[] payload = String.format( final byte[] payload = String.format(
""" """
{ {
@@ -426,7 +483,7 @@ public final class OriginBlacklist {
for (final Json5Element element : arr) { for (final Json5Element element : arr) {
this.plugin.runAsync(() -> { this.plugin.runAsync(() -> {
try { try {
final URL url = new URL(element.getAsString()); final URL url = (new URI(element.getAsString())).toURL();
final HttpURLConnection conn = (HttpURLConnection) url.openConnection(); final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST"); conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestProperty("Content-Type", "application/json");
@@ -440,7 +497,7 @@ public final class OriginBlacklist {
final int code = conn.getResponseCode(); final int code = conn.getResponseCode();
if (code < 200 || code >= 300) { if (code < 200 || code >= 300) {
this.plugin.log(EnumLogLevel.WARN, "Webhook failed (HTTP " + code + ")"); this.logger.warn("Webhook failed (HTTP " + code + ")");
} }
conn.disconnect(); conn.disconnect();
@@ -452,10 +509,15 @@ public final class OriginBlacklist {
} }
} }
private final void repeatTick() {
this.checkForUpdates();
}
private final void checkForUpdates() { private final void checkForUpdates() {
this.checkForUpdates(() -> { this.checkForUpdates(() -> {
if (!this.config.getBoolean("update_checker.auto_update")) { // if (!this.config.getBoolean("update_checker.auto_update")) {
this.plugin.log(EnumLogLevel.INFO, "An update is available! Download it at " + this.updateURL); if (true) {
this.logger.info("An update is available! Download it at " + this.updateURL);
} else { } else {
this.updatePlugin(); this.updatePlugin();
} }
@@ -466,17 +528,17 @@ public final class OriginBlacklist {
private final void updateLogFile(final OriginBlacklistLoginEvent event, final EnumBlacklistType type) { private final void updateLogFile(final OriginBlacklistLoginEvent event, final EnumBlacklistType type) {
if (this.isLogFileEnabled()) { if (this.isLogFileEnabled()) {
final OPlayer player = event.getPlayer(); final OPlayer player = event.getPlayer();
final String txt = Instant.now() + " - [player=" + player.getName() + "," + "blacklist_reason=" + type.toString() + "]"; final String txt = Instant.now() + " - [player=" + player.getName() + "," + "blacklist_reason=" + type.toString()
+ "]";
final Path dir = Paths.get(this.getDataDir()); final Path dir = Paths.get(this.getDataDir());
try { try {
Files.createDirectories(dir); Files.createDirectories(dir);
Files.writeString( Files.writeString(
dir.resolve("blacklist.log"), dir.resolve("blacklist.log"),
txt + "\n", txt + "\n",
StandardOpenOption.CREATE, StandardOpenOption.CREATE,
StandardOpenOption.WRITE, StandardOpenOption.WRITE,
StandardOpenOption.APPEND StandardOpenOption.APPEND);
);
} catch (final Throwable t) { } catch (final Throwable t) {
t.printStackTrace(); t.printStackTrace();
} }
@@ -499,10 +561,26 @@ public final class OriginBlacklist {
return BuildInfo.get("plugin_name") + "/" + BuildInfo.get("plugin_vers") + "+" + BuildInfo.get("git_cm_hash"); return BuildInfo.get("plugin_name") + "/" + BuildInfo.get("plugin_vers") + "+" + BuildInfo.get("git_cm_hash");
} }
public static final boolean isNonNull(final String str) { public static final boolean isNonNullStr(final String str) {
return str != null && !str.isEmpty() && !str.isBlank() && !str.equals("null"); return str != null && !str.isEmpty() && !str.isBlank() && !str.equals("null");
} }
public static final String sha256(String input) {
try {
final MessageDigest md = MessageDigest.getInstance("SHA-256");
final byte[] hash = md.digest(input.getBytes(StandardCharsets.UTF_8));
final StringBuilder sb = new StringBuilder();
for (final byte b : hash) {
sb.append(String.format("%02x", b));
}
return sb.toString();
} catch (final Throwable t) {
throw new RuntimeException(t);
}
}
public static final class BSTATS { public static final class BSTATS {
public static final int VELOCITY = 29033; public static final int VELOCITY = 29033;
public static final int BUNGEE = 29034; public static final int BUNGEE = 29034;

View File

@@ -1,6 +1,6 @@
package xyz.webmc.originblacklist.base.command; package xyz.webmc.originblacklist.core.command;
import xyz.webmc.originblacklist.base.OriginBlacklist; import xyz.webmc.originblacklist.core.OriginBlacklist;
public interface CommandContext { public interface CommandContext {
public OriginBlacklist getPlugin(); public OriginBlacklist getPlugin();

View File

@@ -1,4 +1,4 @@
package xyz.webmc.originblacklist.base.command; package xyz.webmc.originblacklist.core.command;
import java.util.List; import java.util.List;

View File

@@ -1,9 +1,9 @@
package xyz.webmc.originblacklist.base.command; package xyz.webmc.originblacklist.core.command;
import xyz.webmc.originblacklist.base.OriginBlacklist; import xyz.webmc.originblacklist.core.OriginBlacklist;
import xyz.webmc.originblacklist.base.config.OriginBlacklistConfig; import xyz.webmc.originblacklist.core.config.OriginBlacklistConfig;
import xyz.webmc.originblacklist.base.enums.EnumBlacklistType; import xyz.webmc.originblacklist.core.enums.EnumBlacklistType;
import xyz.webmc.originblacklist.base.util.OPlayer; import xyz.webmc.originblacklist.core.util.OPlayer;
import java.util.List; import java.util.List;
@@ -54,7 +54,7 @@ public class OriginBlacklistCommand implements ICommand {
} else { } else {
ctx.reply(NO_PERMISSION); ctx.reply(NO_PERMISSION);
} }
} else if ((add || remove) && OriginBlacklist.isNonNull(argB)) { } else if ((add || remove) && OriginBlacklist.isNonNullStr(argB)) {
if ((add && ctx.hasPermission("originblacklist.command.add")) if ((add && ctx.hasPermission("originblacklist.command.add"))
|| (remove && ctx.hasPermission("originblacklist.command.add"))) { || (remove && ctx.hasPermission("originblacklist.command.add"))) {
final String arrName; final String arrName;
@@ -69,7 +69,7 @@ public class OriginBlacklistCommand implements ICommand {
} else { } else {
arrName = null; arrName = null;
} }
if (OriginBlacklist.isNonNull(arrName)) { if (OriginBlacklist.isNonNullStr(arrName)) {
final String arrPath = "blacklist." + arrName; final String arrPath = "blacklist." + arrName;
final Json5Array arr = config.getArray(arrPath); final Json5Array arr = config.getArray(arrPath);
if (add) { if (add) {
@@ -95,7 +95,7 @@ public class OriginBlacklistCommand implements ICommand {
} else { } else {
ctx.reply(NO_PERMISSION); ctx.reply(NO_PERMISSION);
} }
} else if ("test".equalsIgnoreCase(command) && OriginBlacklist.isNonNull(argA)) { } else if ("test".equalsIgnoreCase(command) && OriginBlacklist.isNonNullStr(argA)) {
if (ctx.hasPermission("originblacklist.command.test")) { if (ctx.hasPermission("originblacklist.command.test")) {
if (this.isBlacklisted(argA)) { if (this.isBlacklisted(argA)) {
ctx.reply("<green>" + argA + " is on the blacklist.</green>"); ctx.reply("<green>" + argA + " is on the blacklist.</green>");

View File

@@ -1,6 +1,6 @@
package xyz.webmc.originblacklist.base.config; package xyz.webmc.originblacklist.core.config;
import xyz.webmc.originblacklist.base.OriginBlacklist; import xyz.webmc.originblacklist.core.OriginBlacklist;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
@@ -22,7 +22,8 @@ import de.marhali.json5.Json5Object;
import de.marhali.json5.Json5Primitive; import de.marhali.json5.Json5Primitive;
public final class OriginBlacklistConfig { public final class OriginBlacklistConfig {
private static final Json5Object DEFAULT_CONFIG = getDefaultConfig(); public static final Json5Object DEFAULT_CONFIG = getDefaultConfig();
public static final int LATEST_CONFIG_VERSION = 2;
private final Json5 json5; private final Json5 json5;
private final File file; private final File file;
@@ -41,7 +42,7 @@ public final class OriginBlacklistConfig {
.writeComments() .writeComments()
.prettyPrinting() .prettyPrinting()
.build()); .build());
this.file = new File(plugin.getDataDir() + "/config.json5"); this.file = new File(plugin.getDataDir() + "/config.json5");
this.filePath = file.toPath(); this.filePath = file.toPath();
this.iconFile = new File(plugin.getDataDir() + "/blacklisted.png"); this.iconFile = new File(plugin.getDataDir() + "/blacklisted.png");
@@ -73,6 +74,7 @@ public final class OriginBlacklistConfig {
Json5Element parsed = this.json5.parse(text); Json5Element parsed = this.json5.parse(text);
if (parsed instanceof Json5Object) { if (parsed instanceof Json5Object) {
this.config = (Json5Object) parsed; this.config = (Json5Object) parsed;
this.config = OriginBlacklistConfigTransformer.transformConfig(this.config);
merge(this.config, DEFAULT_CONFIG); merge(this.config, DEFAULT_CONFIG);
} else { } else {
throw new IOException("Config must be an object!"); throw new IOException("Config must be an object!");
@@ -130,7 +132,7 @@ public final class OriginBlacklistConfig {
public final Json5Element get(final String key) { public final Json5Element get(final String key) {
Json5Element element = null; Json5Element element = null;
if (this.config != null && OriginBlacklist.isNonNull(key)) { if (this.config != null && OriginBlacklist.isNonNullStr(key)) {
element = this.config; element = this.config;
final String[] parts = splitPath(key); final String[] parts = splitPath(key);
@@ -262,18 +264,29 @@ public final class OriginBlacklistConfig {
kick.add("%action%"); kick.add("%action%");
kick.add(""); kick.add("");
kick.add("<aqua>Think this is a mistake? Join our discord:</aqua>"); kick.add("<aqua>Think this is a mistake? Join our discord:</aqua>");
kick.add("<blue>discord.gg/changethisintheconfig</blue>"); kick.add("<blue>%discord_invite%</blue>");
addJSONObj(mObj, "kick", kick, null); addJSONObj(mObj, "kick", kick, null);
final Json5Array motd = new Json5Array();
motd.add("<red>This %block_type% is %not_allowed%!</red>");
motd.add("<dark_gray>»</dark_gray> <gray>%blocked_value%</gray>");
addJSONObj(mObj, "motd", motd, null);
final Json5Object actions = new Json5Object(); final Json5Object actions = new Json5Object();
actions.add("generic", Json5Primitive.fromString("<gold>Please switch to a different %block_type%.</gold>")); actions.add("generic", Json5Primitive.fromString("<gold>Please switch to a different %block_type%.</gold>"));
actions.add("player_name", Json5Primitive.fromString("<gold>Please change your %block_type%.</gold>")); actions.add("player_name", Json5Primitive.fromString("<gold>Please change your %block_type%.</gold>"));
actions.add("ip_address", Json5Primitive.fromString("<gold>Please contact staff for assistance.</gold>")); actions.add("ip_address", Json5Primitive.fromString("<gold>Please contact staff for assistance.</gold>"));
addJSONObj(mObj, "actions", actions, null); addJSONObj(mObj, "actions", actions, null);
addJSONObj(obj, "messages", mObj, null); addJSONObj(obj, "messages", mObj, null);
final Json5Object nObj = new Json5Object();
addJSONObj(nObj, "enabled", Json5Primitive.fromBoolean(true), null);
final Json5Array mArr = new Json5Array();
mArr.add("<red>This %block_type% is %not_allowed%!</red>");
mArr.add("<dark_gray>»</dark_gray> <gray>%blocked_value%</gray>");
addJSONObj(nObj, "text", mArr, null);
final Json5Object mPlayers = new Json5Object();
addJSONObj(mPlayers, "online", Json5Primitive.fromNumber(0), null);
addJSONObj(mPlayers, "max", Json5Primitive.fromNumber(0), null);
final Json5Array hArr = new Json5Array();
hArr.add("<blue>Join our discord</blue>");
hArr.add("<blue>%discord_invite%</blue>");
addJSONObj(mPlayers, "hover", hArr, null);
addJSONObj(nObj, "players", mPlayers, null);
addJSONObj(obj, "motd", nObj, null);
final Json5Object bObj = new Json5Object(); final Json5Object bObj = new Json5Object();
final Json5Array origins = new Json5Array(); final Json5Array origins = new Json5Array();
origins.add(".*eaglerhackedclients\\.vercel\\.app.*"); origins.add(".*eaglerhackedclients\\.vercel\\.app.*");
@@ -300,24 +313,29 @@ public final class OriginBlacklistConfig {
final Json5Array ips = new Json5Array(); final Json5Array ips = new Json5Array();
ips.add("192.0.2.0/24"); ips.add("192.0.2.0/24");
addJSONObj(bObj, "ip_addresses", ips, null); addJSONObj(bObj, "ip_addresses", ips, null);
final Json5Array sub = new Json5Array();
addJSONObj(bObj, "subscriptions", sub, null);
addJSONObj(obj, "blacklist", bObj, null); addJSONObj(obj, "blacklist", bObj, null);
final Json5Object dObj = new Json5Object(); final Json5Object dObj = new Json5Object();
addJSONObj(dObj, "enabled", Json5Primitive.fromBoolean(false), null); addJSONObj(dObj, "invite", Json5Primitive.fromString("discord.gg/changeme"), null);
addJSONObj(dObj, "webhook_urls", new Json5Array(), null); final Json5Object webhook = new Json5Object();
addJSONObj(dObj, "send_ips", Json5Primitive.fromBoolean(true), null); addJSONObj(webhook, "enabled", Json5Primitive.fromBoolean(false), null);
addJSONObj(webhook, "webhook_urls", new Json5Array(), null);
addJSONObj(webhook, "send_ips", Json5Primitive.fromBoolean(true), null);
addJSONObj(dObj, "webhook", webhook, null);
addJSONObj(obj, "discord", dObj, null); addJSONObj(obj, "discord", dObj, null);
final Json5Object uObj = new Json5Object(); final Json5Object uObj = new Json5Object();
addJSONObj(uObj, "enabled", Json5Primitive.fromBoolean(true), null); addJSONObj(uObj, "enabled", Json5Primitive.fromBoolean(true), null);
addJSONObj(uObj, "allow_snapshots", Json5Primitive.fromBoolean(false), null); addJSONObj(uObj, "allow_snapshots", Json5Primitive.fromBoolean(false), null);
addJSONObj(uObj, "check_timer", Json5Primitive.fromNumber(3600), null); // addJSONObj(uObj, "check_timer", Json5Primitive.fromNumber(3600), null);
addJSONObj(uObj, "auto_update", Json5Primitive.fromBoolean(true), null); addJSONObj(uObj, "auto_update", Json5Primitive.fromBoolean(false), null);
addJSONObj(obj, "update_checker", uObj, null); addJSONObj(obj, "update_checker", uObj, null);
addJSONObj(obj, "blacklist_http_api", Json5Primitive.fromBoolean(false), null); addJSONObj(obj, "blacklist_http_api", Json5Primitive.fromBoolean(false), null);
addJSONObj(obj, "blacklist_to_whitelist", Json5Primitive.fromBoolean(false), null); addJSONObj(obj, "blacklist_to_whitelist", Json5Primitive.fromBoolean(false), null);
addJSONObj(obj, "block_undefined_origin", Json5Primitive.fromBoolean(false), null); addJSONObj(obj, "block_undefined_origin", Json5Primitive.fromBoolean(false), null);
addJSONObj(obj, "bStats", Json5Primitive.fromBoolean(true), null); addJSONObj(obj, "bStats", Json5Primitive.fromBoolean(true), null);
addJSONObj(obj, "logFile", Json5Primitive.fromBoolean(true), null); addJSONObj(obj, "logFile", Json5Primitive.fromBoolean(true), null);
addJSONObj(obj, "config_version", Json5Primitive.fromNumber(1), "DO NOT CHANGE"); addJSONObj(obj, "config_version", Json5Primitive.fromNumber(LATEST_CONFIG_VERSION), "DO NOT CHANGE");
return obj; return obj;
} }
@@ -477,7 +495,7 @@ public final class OriginBlacklistConfig {
private static final void addJSONObj(final Json5Object obj, final String key, final Json5Element value, private static final void addJSONObj(final Json5Object obj, final String key, final Json5Element value,
final String comment) { final String comment) {
if (OriginBlacklist.isNonNull(comment)) { if (OriginBlacklist.isNonNullStr(comment)) {
value.setComment(comment); value.setComment(comment);
} }
obj.add(key, value); obj.add(key, value);
@@ -486,7 +504,7 @@ public final class OriginBlacklistConfig {
private static final String[] splitPath(final String key) { private static final String[] splitPath(final String key) {
final String[] ret; final String[] ret;
if (OriginBlacklist.isNonNull(key)) { if (OriginBlacklist.isNonNullStr(key)) {
ret = key.split("\\."); ret = key.split("\\.");
} else { } else {
ret = new String[0]; ret = new String[0];

View File

@@ -0,0 +1,39 @@
package xyz.webmc.originblacklist.core.config;
import de.marhali.json5.Json5Array;
import de.marhali.json5.Json5Object;
import de.marhali.json5.Json5Primitive;
public final class OriginBlacklistConfigTransformer {
public static final Json5Object transformConfig(final Json5Object config) {
final Json5Object obj = config.deepCopy();
final int ver = obj.get("config_version").getAsInt();
if (ver <= 1) {
final Json5Object mObj = obj.get("messages").getAsJson5Object().deepCopy();
final Json5Array motd = mObj.get("motd").getAsJson5Array().deepCopy();
mObj.remove("motd");
final Json5Object nObj = new Json5Object();
nObj.add("text", motd);
obj.remove("messages");
obj.add("messages", mObj);
obj.add("motd", nObj);
final Json5Object dObj = obj.get("discord").getAsJson5Object().deepCopy();
final Json5Primitive wEnabled = dObj.get("enabled").getAsJson5Primitive();
final Json5Array wURLS = dObj.get("webhook_urls").getAsJson5Array().deepCopy();
final Json5Primitive wAddrs = dObj.get("send_ips").getAsJson5Primitive();
dObj.remove("enabled");
dObj.remove("webhook_urls");
dObj.remove("send_ips");
final Json5Object oObj = new Json5Object();
oObj.add("enabled", wEnabled);
oObj.add("webhook_urls", wURLS);
oObj.add("send_ips", wAddrs);
dObj.add("webhook", oObj);
obj.remove("discord");
obj.add("discord", dObj);
}
obj.remove("config_version");
obj.add("config_version", Json5Primitive.fromNumber(OriginBlacklistConfig.LATEST_CONFIG_VERSION));
return obj;
}
}

View File

@@ -1,6 +1,6 @@
package xyz.webmc.originblacklist.base.enums; package xyz.webmc.originblacklist.core.enums;
import xyz.webmc.originblacklist.base.OriginBlacklist; import xyz.webmc.originblacklist.core.OriginBlacklist;
public enum EnumBlacklistType { public enum EnumBlacklistType {
ORIGIN("origin", "website", "origins", null), ORIGIN("origin", "website", "origins", null),
@@ -18,7 +18,7 @@ public enum EnumBlacklistType {
this.str = str; this.str = str;
this.alt = alt; this.alt = alt;
this.arr = arr; this.arr = arr;
this.act = OriginBlacklist.isNonNull(act) ? act : OriginBlacklist.GENERIC_STR.toLowerCase(); this.act = OriginBlacklist.isNonNullStr(act) ? act : OriginBlacklist.GENERIC_STR.toLowerCase();
} }
public final String getString() { public final String getString() {

View File

@@ -1,4 +1,4 @@
package xyz.webmc.originblacklist.base.enums; package xyz.webmc.originblacklist.core.enums;
public enum EnumConnectionType { public enum EnumConnectionType {
JAVA, JAVA,

View File

@@ -1,7 +1,7 @@
package xyz.webmc.originblacklist.base.events; package xyz.webmc.originblacklist.core.events;
import xyz.webmc.originblacklist.base.enums.EnumConnectionType; import xyz.webmc.originblacklist.core.enums.EnumConnectionType;
import xyz.webmc.originblacklist.base.util.OPlayer; import xyz.webmc.originblacklist.core.util.OPlayer;
import net.lax1dude.eaglercraft.backend.server.api.event.IBaseServerEvent; import net.lax1dude.eaglercraft.backend.server.api.event.IBaseServerEvent;

View File

@@ -1,7 +1,7 @@
package xyz.webmc.originblacklist.base.events; package xyz.webmc.originblacklist.core.events;
import xyz.webmc.originblacklist.base.enums.EnumConnectionType; import xyz.webmc.originblacklist.core.enums.EnumConnectionType;
import xyz.webmc.originblacklist.base.util.OPlayer; import xyz.webmc.originblacklist.core.util.OPlayer;
import net.lax1dude.eaglercraft.backend.server.api.event.IEaglercraftLoginEvent; import net.lax1dude.eaglercraft.backend.server.api.event.IEaglercraftLoginEvent;

View File

@@ -1,7 +1,7 @@
package xyz.webmc.originblacklist.base.events; package xyz.webmc.originblacklist.core.events;
import xyz.webmc.originblacklist.base.enums.EnumConnectionType; import xyz.webmc.originblacklist.core.enums.EnumConnectionType;
import xyz.webmc.originblacklist.base.util.OPlayer; import xyz.webmc.originblacklist.core.util.OPlayer;
import net.lax1dude.eaglercraft.backend.server.api.event.IEaglercraftMOTDEvent; import net.lax1dude.eaglercraft.backend.server.api.event.IEaglercraftMOTDEvent;

View File

@@ -1,6 +1,6 @@
package xyz.webmc.originblacklist.base.http; package xyz.webmc.originblacklist.core.http;
import xyz.webmc.originblacklist.base.OriginBlacklist; import xyz.webmc.originblacklist.core.OriginBlacklist;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
@@ -8,12 +8,12 @@ import net.lax1dude.eaglercraft.backend.server.api.webserver.IRequestContext;
import net.lax1dude.eaglercraft.backend.server.api.webserver.IRequestHandler; import net.lax1dude.eaglercraft.backend.server.api.webserver.IRequestHandler;
import net.lax1dude.eaglercraft.backend.server.api.webserver.RouteDesc; import net.lax1dude.eaglercraft.backend.server.api.webserver.RouteDesc;
public class OriginBlacklistRequestHandler implements IRequestHandler { public final class OriginBlacklistRequestHandler implements IRequestHandler {
private static final RouteDesc route = RouteDesc.create("/originblacklist/v2/"); private static final RouteDesc route = RouteDesc.create("/originblacklist/v2/");
private final OriginBlacklist plugin; private final OriginBlacklist plugin;
public OriginBlacklistRequestHandler(final OriginBlacklist plugin) { public OriginBlacklistRequestHandler(final OriginBlacklist plugin) {
this.plugin = plugin; this.plugin = plugin;
} }
@Override @Override

View File

@@ -0,0 +1,19 @@
package xyz.webmc.originblacklist.core.logger;
import xyz.webmc.originblacklist.core.OriginBlacklist;
public abstract class AbstractLogger {
private OriginBlacklist plugin = null;
public abstract void info(final String txt, final Object ...args);
public abstract void warn(final String txt, final Object ...args);
public abstract void error(final String txt, final Object ...args);
public final AbstractLogger setPlugin(final OriginBlacklist plugin) {
this.plugin = plugin;
return this;
}
public final void debug(final String txt, final Object ...args) {
if (this.plugin.isDebugEnabled()) {
this.info(txt, args);
}
}
}

View File

@@ -0,0 +1,27 @@
package xyz.webmc.originblacklist.core.logger;
import java.util.logging.Level;
import java.util.logging.Logger;
public final class JavaLogger extends AbstractLogger {
private final Logger logger;
public JavaLogger(final Logger logger) {
this.logger = logger;
}
@Override
public final void info(final String txt, final Object ...args) {
this.logger.log(Level.INFO, txt, args);
}
@Override
public final void warn(final String txt, final Object ...args) {
this.logger.log(Level.WARNING, txt, args);
}
@Override
public final void error(final String txt, final Object ...args) {
this.logger.log(Level.SEVERE, txt, args);
}
}

View File

@@ -0,0 +1,26 @@
package xyz.webmc.originblacklist.core.logger;
import org.slf4j.Logger;
public final class SLF4JLogger extends AbstractLogger {
private final Logger logger;
public SLF4JLogger(final Logger logger) {
this.logger = logger;
}
@Override
public final void info(final String txt, final Object ...args) {
this.logger.info(txt, args);
}
@Override
public final void warn(final String txt, final Object ...args) {
this.logger.warn(txt, args);
}
@Override
public final void error(final String txt, final Object ...args) {
this.logger.error(txt, args);
}
}

View File

@@ -0,0 +1,21 @@
package xyz.webmc.originblacklist.core.metrics;
import java.util.ArrayList;
import java.util.List;
import org.bstats.charts.CustomChart;
public abstract class GenericMetricsAdapter {
protected final List<CustomChart> charts;
protected GenericMetricsAdapter() {
this.charts = new ArrayList<>();
}
public final void addCustomChart(final CustomChart chart) {
this.charts.add(chart);
}
public abstract void start();
public abstract void shutdown();
}

View File

@@ -1,4 +1,4 @@
package xyz.webmc.originblacklist.base.util; package xyz.webmc.originblacklist.core.util;
import java.io.InputStream; import java.io.InputStream;
import java.util.Properties; import java.util.Properties;

View File

@@ -1,4 +1,4 @@
package xyz.webmc.originblacklist.base.util; package xyz.webmc.originblacklist.core.util;
public final class ChatFormat { public final class ChatFormat {
private static final String SYMBOL = "§"; private static final String SYMBOL = "§";

View File

@@ -1,4 +1,4 @@
package xyz.webmc.originblacklist.base.util; package xyz.webmc.originblacklist.core.util;
public final class EaglerEventPriority { public final class EaglerEventPriority {
public static final int EAGLER_MOTD_EVENT = 100; public static final int EAGLER_MOTD_EVENT = 100;

View File

@@ -1,8 +1,9 @@
package xyz.webmc.originblacklist.base.util; package xyz.webmc.originblacklist.core.util;
import xyz.webmc.originblacklist.base.enums.EnumLogLevel; import xyz.webmc.originblacklist.core.events.OriginBlacklistLoginEvent;
import xyz.webmc.originblacklist.base.events.OriginBlacklistLoginEvent; import xyz.webmc.originblacklist.core.events.OriginBlacklistMOTDEvent;
import xyz.webmc.originblacklist.base.events.OriginBlacklistMOTDEvent; import xyz.webmc.originblacklist.core.logger.AbstractLogger;
import xyz.webmc.originblacklist.core.metrics.GenericMetricsAdapter;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@@ -19,9 +20,11 @@ public interface IOriginBlacklistPlugin {
public Path getPluginJarPath(); public Path getPluginJarPath();
public IEaglerXServerAPI getEaglerAPI(); public GenericMetricsAdapter getMetrics();
public void log(final EnumLogLevel level, final String txt); public AbstractLogger getTheLogger();
public IEaglerXServerAPI getEaglerAPI();
public void kickPlayer(final Component txt, final OriginBlacklistLoginEvent event); public void kickPlayer(final Component txt, final OriginBlacklistLoginEvent event);

View File

@@ -1,4 +1,4 @@
package xyz.webmc.originblacklist.base.util; package xyz.webmc.originblacklist.core.util;
import org.semver4j.Semver; import org.semver4j.Semver;

View File

@@ -1,6 +1,6 @@
package xyz.webmc.originblacklist.base.util; package xyz.webmc.originblacklist.core.util;
import xyz.webmc.originblacklist.base.OriginBlacklist; import xyz.webmc.originblacklist.core.OriginBlacklist;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.SocketAddress; import java.net.SocketAddress;
@@ -85,7 +85,7 @@ public final class OPlayer {
} }
private static final String formatIPAddress(String addr) { private static final String formatIPAddress(String addr) {
if (OriginBlacklist.isNonNull(addr)) { if (OriginBlacklist.isNonNullStr(addr)) {
if (addr.startsWith("/")) { if (addr.startsWith("/")) {
addr = addr.substring(1); addr = addr.substring(1);
} }

View File

@@ -1,10 +1,11 @@
package xyz.webmc.originblacklist.base.util; package xyz.webmc.originblacklist.core.util;
import xyz.webmc.originblacklist.base.OriginBlacklist; import xyz.webmc.originblacklist.core.OriginBlacklist;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL; import java.net.URL;
import de.marhali.json5.Json5; import de.marhali.json5.Json5;
@@ -20,7 +21,7 @@ public final class UpdateChecker {
public static final String checkForUpdates(final String repo, final Semver currentVersion, public static final String checkForUpdates(final String repo, final Semver currentVersion,
final boolean allowSnapshots) { final boolean allowSnapshots) {
try { try {
final URL url = new URL("https://api.github.com/repos/" + repo + "/releases"); final URL url = (new URI("https://api.github.com/repos/" + repo + "/releases")).toURL();
final HttpURLConnection conn = (HttpURLConnection) url.openConnection(); final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET"); conn.setRequestMethod("GET");
conn.setConnectTimeout(5000); conn.setConnectTimeout(5000);
@@ -75,7 +76,7 @@ public final class UpdateChecker {
comm = ""; comm = "";
} }
if (ver.isGreaterThan(currentVersion) || (allowSnapshots && currentVersion.diff(ver) == VersionDiff.BUILD if (ver.isGreaterThan(currentVersion) || (allowSnapshots && currentVersion.diff(ver) == VersionDiff.BUILD
&& OriginBlacklist.isNonNull(comm) && !BuildInfo.get("git_cm_hash").startsWith(comm))) { && OriginBlacklist.isNonNullStr(comm) && !BuildInfo.get("git_cm_hash").startsWith(comm))) {
element = obj.get("assets"); element = obj.get("assets");
if (element instanceof Json5Array) { if (element instanceof Json5Array) {
final Json5Array aArr = element.getAsJson5Array(); final Json5Array aArr = element.getAsJson5Array();

View File

@@ -1,22 +1,20 @@
package xyz.webmc.originblacklist.velocity; package xyz.webmc.originblacklist.velocity;
import xyz.webmc.originblacklist.base.OriginBlacklist; import xyz.webmc.originblacklist.core.OriginBlacklist;
import xyz.webmc.originblacklist.base.enums.EnumConnectionType; import xyz.webmc.originblacklist.core.enums.EnumConnectionType;
import xyz.webmc.originblacklist.base.enums.EnumLogLevel; import xyz.webmc.originblacklist.core.events.OriginBlacklistLoginEvent;
import xyz.webmc.originblacklist.base.events.OriginBlacklistLoginEvent; import xyz.webmc.originblacklist.core.events.OriginBlacklistMOTDEvent;
import xyz.webmc.originblacklist.base.events.OriginBlacklistMOTDEvent; import xyz.webmc.originblacklist.core.logger.SLF4JLogger;
import xyz.webmc.originblacklist.base.util.EaglerEventPriority; import xyz.webmc.originblacklist.core.util.EaglerEventPriority;
import xyz.webmc.originblacklist.base.util.IOriginBlacklistPlugin; import xyz.webmc.originblacklist.core.util.IOriginBlacklistPlugin;
import xyz.webmc.originblacklist.base.util.IncompatibleDependencyException; import xyz.webmc.originblacklist.core.util.IncompatibleDependencyException;
import xyz.webmc.originblacklist.base.util.OPlayer; import xyz.webmc.originblacklist.core.util.OPlayer;
import xyz.webmc.originblacklist.velocity.command.OriginBlacklistCommandVelocity; import xyz.webmc.originblacklist.velocity.command.OriginBlacklistCommandVelocity;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import com.google.inject.Inject; import com.google.inject.Inject;
@@ -39,35 +37,32 @@ import net.lax1dude.eaglercraft.backend.server.api.IEaglerXServerAPI;
import net.lax1dude.eaglercraft.backend.server.api.velocity.EaglerXServerAPI; import net.lax1dude.eaglercraft.backend.server.api.velocity.EaglerXServerAPI;
import net.lax1dude.eaglercraft.backend.server.api.velocity.event.EaglercraftLoginEvent; import net.lax1dude.eaglercraft.backend.server.api.velocity.event.EaglercraftLoginEvent;
import net.lax1dude.eaglercraft.backend.server.api.velocity.event.EaglercraftMOTDEvent; import net.lax1dude.eaglercraft.backend.server.api.velocity.event.EaglercraftMOTDEvent;
import org.bstats.charts.AdvancedPie;
import org.bstats.velocity.Metrics;
import org.bstats.velocity.Metrics.Factory; import org.bstats.velocity.Metrics.Factory;
import org.semver4j.Semver; import org.semver4j.Semver;
import org.slf4j.Logger; import org.slf4j.Logger;
@SuppressWarnings({ "deprecation", "unchecked", "rawtypes" }) @SuppressWarnings({ "deprecation", "rawtypes" })
public final class OriginBlacklistVelocity implements IOriginBlacklistPlugin { public final class OriginBlacklistVelocityPlugin implements IOriginBlacklistPlugin {
private final PluginContainer plugin; private final PluginContainer plugin;
private final Factory metricsFactory; private final Factory metricsFactory;
private final ProxyServer proxy; private final ProxyServer proxy;
private final Logger logger; private final SLF4JLogger logger;
private boolean papiPlaceholdersEnabled; private boolean papiPlaceholdersEnabled;
private Object papi; private Object papi;
private OriginBlacklist blacklist; private OriginBlacklist blacklist;
private Metrics metrics;
@Inject @Inject
public OriginBlacklistVelocity(final PluginContainer plugin, Factory metricsFactory, final ProxyServer proxy, public OriginBlacklistVelocityPlugin(final PluginContainer plugin, Factory metricsFactory, final ProxyServer proxy,
final Logger logger) { final Logger logger) {
this.plugin = plugin; this.plugin = plugin;
this.metricsFactory = metricsFactory; this.metricsFactory = metricsFactory;
this.proxy = proxy; this.proxy = proxy;
this.logger = logger; this.logger = new SLF4JLogger(logger);
} }
@Subscribe @Subscribe
public final void onProxyInitialization(ProxyInitializeEvent event) { public final void onProxyInitialization(final ProxyInitializeEvent event) {
this.proxy.getPluginManager().getPlugin("eaglerxserver").ifPresentOrElse(plugin -> { this.proxy.getPluginManager().getPlugin("eaglerxserver").ifPresentOrElse(plugin -> {
final Semver version = new Semver(plugin.getDescription().getVersion().orElse("1.0.0")); final Semver version = new Semver(plugin.getDescription().getVersion().orElse("1.0.0"));
if (version.isLowerThan(OriginBlacklist.REQUIRED_API_VER)) { if (version.isLowerThan(OriginBlacklist.REQUIRED_API_VER)) {
@@ -91,20 +86,6 @@ public final class OriginBlacklistVelocity implements IOriginBlacklistPlugin {
this.blacklist = new OriginBlacklist(this); this.blacklist = new OriginBlacklist(this);
this.proxy.getCommandManager().register("originblacklist", new OriginBlacklistCommandVelocity(this.blacklist)); this.proxy.getCommandManager().register("originblacklist", new OriginBlacklistCommandVelocity(this.blacklist));
this.blacklist.init(); this.blacklist.init();
if (this.blacklist.isMetricsEnabled()) {
this.metrics = this.metricsFactory.make(this, OriginBlacklist.BSTATS.VELOCITY);
this.metrics.addCustomChart(new AdvancedPie("player_types", () -> {
final Map<String, Integer> playerMap = new HashMap<>();
for (final Player player : this.proxy.getAllPlayers()) {
final boolean eagler = this.getEaglerAPI().isEaglerPlayerByUUID(player.getUniqueId());
final String key = eagler ? "Eagler" : "Java";
playerMap.put(key, playerMap.getOrDefault(key, 0) + 1);
}
return playerMap;
}));
}
} }
@Subscribe @Subscribe
@@ -127,19 +108,21 @@ public final class OriginBlacklistVelocity implements IOriginBlacklistPlugin {
@Subscribe(order = PostOrder.FIRST) @Subscribe(order = PostOrder.FIRST)
public final void onJavaLogin(final PreLoginEvent event) { public final void onJavaLogin(final PreLoginEvent event) {
final InboundConnection conn = event.getConnection(); final InboundConnection conn = event.getConnection();
final InetSocketAddress vhost = conn.getVirtualHost().orElseThrow(); final InetSocketAddress vhost = conn.getVirtualHost().orElse(null);
final String origin = vhost != null ? vhost.getHostString() + vhost.getPort() : OriginBlacklist.UNKNOWN_STR;
final OPlayer player = new OPlayer(null, event.getUsername(), event.getUniqueId(), final OPlayer player = new OPlayer(null, event.getUsername(), event.getUniqueId(),
conn.getRemoteAddress().toString(), OriginBlacklist.UNKNOWN_STR, vhost.getHostString() + vhost.getPort(), conn.getRemoteAddress().toString(), OriginBlacklist.UNKNOWN_STR, origin,
conn.getProtocolVersion().getProtocol()); conn.getProtocolVersion().getProtocol());
this.blacklist.handleLogin(new OriginBlacklistLoginEvent(null, event, EnumConnectionType.JAVA, player)); this.blacklist.handleLogin(new OriginBlacklistLoginEvent(null, event, EnumConnectionType.JAVA, player));
} }
@Subscribe(order = PostOrder.FIRST) @Subscribe(order = PostOrder.FIRST)
public final void onJavaHandshake(final PlayerClientBrandEvent event) { public final void onJavaHandshake(final PlayerClientBrandEvent event) {
final InetSocketAddress vhost = event.getPlayer().getVirtualHost().orElseThrow(); final InetSocketAddress vhost = event.getPlayer().getVirtualHost().orElse(null);
final String origin = vhost != null ? vhost.getHostString() + vhost.getPort() : OriginBlacklist.UNKNOWN_STR;
final Player aPlayer = event.getPlayer(); final Player aPlayer = event.getPlayer();
final OPlayer bPlayer = new OPlayer(null, aPlayer.getUsername(), aPlayer.getUniqueId(), final OPlayer bPlayer = new OPlayer(null, aPlayer.getUsername(), aPlayer.getUniqueId(),
aPlayer.getRemoteAddress().getAddress().toString(), event.getBrand(), vhost.getHostString() + vhost.getPort(), aPlayer.getRemoteAddress().getAddress().toString(), event.getBrand(), origin,
event.getPlayer().getProtocolVersion().getProtocol()); event.getPlayer().getProtocolVersion().getProtocol());
this.blacklist.handleLogin(new OriginBlacklistLoginEvent(null, event, EnumConnectionType.JAVA, bPlayer)); this.blacklist.handleLogin(new OriginBlacklistLoginEvent(null, event, EnumConnectionType.JAVA, bPlayer));
} }
@@ -147,10 +130,10 @@ public final class OriginBlacklistVelocity implements IOriginBlacklistPlugin {
@Subscribe(order = PostOrder.LAST) @Subscribe(order = PostOrder.LAST)
public final void onJavaMOTD(final ProxyPingEvent event) { public final void onJavaMOTD(final ProxyPingEvent event) {
final InboundConnection conn = event.getConnection(); final InboundConnection conn = event.getConnection();
final InetSocketAddress vhost = conn.getVirtualHost().orElseThrow(); final InetSocketAddress vhost = conn.getVirtualHost().orElse(null);
final String origin = vhost != null ? vhost.getHostString() + vhost.getPort() : OriginBlacklist.UNKNOWN_STR;
final OPlayer player = new OPlayer(null, null, null, conn.getRemoteAddress().getHostString(), final OPlayer player = new OPlayer(null, null, null, conn.getRemoteAddress().getHostString(),
vhost.getHostString() + vhost.getPort(), null, origin, -1);
null, -1);
this.blacklist.handleMOTD(new OriginBlacklistMOTDEvent(null, event, EnumConnectionType.JAVA, player)); this.blacklist.handleMOTD(new OriginBlacklistMOTDEvent(null, event, EnumConnectionType.JAVA, player));
} }
@@ -173,24 +156,19 @@ public final class OriginBlacklistVelocity implements IOriginBlacklistPlugin {
} }
} }
@Override
public final VelocityMetricsAdapter getMetrics() {
return new VelocityMetricsAdapter(this, this.metricsFactory);
}
@Override @Override
public final IEaglerXServerAPI getEaglerAPI() { public final IEaglerXServerAPI getEaglerAPI() {
return EaglerXServerAPI.instance(); return EaglerXServerAPI.instance();
} }
@Override @Override
public final void log(final EnumLogLevel level, final String txt) { public final SLF4JLogger getTheLogger() {
if (level == EnumLogLevel.WARN) { return this.logger;
this.logger.warn(txt);
} else if (level == EnumLogLevel.ERROR) {
this.logger.error(txt);
} else if (level == EnumLogLevel.DEBUG) {
if (this.blacklist.isDebugEnabled()) {
this.logger.info(txt);
}
} else {
this.logger.info(txt);
}
} }
@Override @Override
@@ -254,8 +232,7 @@ public final class OriginBlacklistVelocity implements IOriginBlacklistPlugin {
@Override @Override
public final void shutdown() { public final void shutdown() {
this.metrics.shutdown(); for (final ScheduledTask task : this.proxy.getScheduler().tasksByPlugin(this.plugin)) {
for (ScheduledTask task : this.proxy.getScheduler().tasksByPlugin(this.plugin)) {
task.cancel(); task.cancel();
} }
} }

View File

@@ -0,0 +1,38 @@
package xyz.webmc.originblacklist.velocity;
import xyz.webmc.originblacklist.core.OriginBlacklist;
import xyz.webmc.originblacklist.core.metrics.GenericMetricsAdapter;
import org.bstats.charts.CustomChart;
import org.bstats.velocity.Metrics;
import org.bstats.velocity.Metrics.Factory;
public final class VelocityMetricsAdapter extends GenericMetricsAdapter {
private final OriginBlacklistVelocityPlugin plugin;
private final Factory factory;
private Metrics metrics;
public VelocityMetricsAdapter(final OriginBlacklistVelocityPlugin plugin, final Factory factory) {
super();
this.plugin = plugin;
this.factory = factory;
}
@Override
public void start() {
if (this.metrics == null) {
this.metrics = this.factory.make(this.plugin, OriginBlacklist.BSTATS.VELOCITY);
for (final CustomChart chart : this.charts) {
this.metrics.addCustomChart(chart);
}
}
}
@Override
public void shutdown() {
if (this.metrics != null) {
this.metrics.shutdown();
this.metrics = null;
}
}
}

View File

@@ -1,7 +1,7 @@
package xyz.webmc.originblacklist.velocity.command; package xyz.webmc.originblacklist.velocity.command;
import xyz.webmc.originblacklist.base.OriginBlacklist; import xyz.webmc.originblacklist.core.OriginBlacklist;
import xyz.webmc.originblacklist.base.command.OriginBlacklistCommand; import xyz.webmc.originblacklist.core.command.OriginBlacklistCommand;
import java.util.List; import java.util.List;

View File

@@ -1,7 +1,7 @@
package xyz.webmc.originblacklist.velocity.command; package xyz.webmc.originblacklist.velocity.command;
import xyz.webmc.originblacklist.base.OriginBlacklist; import xyz.webmc.originblacklist.core.OriginBlacklist;
import xyz.webmc.originblacklist.base.command.CommandContext; import xyz.webmc.originblacklist.core.command.CommandContext;
import com.velocitypowered.api.command.SimpleCommand.Invocation; import com.velocitypowered.api.command.SimpleCommand.Invocation;
import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.MiniMessage;

View File

@@ -1,6 +1,6 @@
name: ${plugin_name} name: ${plugin_name}
version: ${plugin_vers} version: ${plugin_vers}
main: xyz.webmc.${plugin_iden}.bungee.${plugin_name}Bungee main: xyz.webmc.${plugin_iden}.bungee.${plugin_name}BungeePlugin
description: ${plugin_desc} description: ${plugin_desc}
website: ${plugin_site} website: ${plugin_site}
author: ${plugin_athr} author: ${plugin_athr}

View File

@@ -1,6 +1,6 @@
name: ${plugin_name} name: ${plugin_name}
version: ${plugin_vers} version: ${plugin_vers}
main: xyz.webmc.${plugin_iden}.bukkit.${plugin_name}Bukkit main: xyz.webmc.${plugin_iden}.bukkit.${plugin_name}BukkitPlugin
description: ${plugin_desc} description: ${plugin_desc}
website: ${plugin_site} website: ${plugin_site}
authors: ${plugin_athr} authors: ${plugin_athr}

View File

@@ -4,7 +4,7 @@
"version": "${plugin_vers}", "version": "${plugin_vers}",
"description": "${plugin_desc}", "description": "${plugin_desc}",
"website": "${plugin_site}", "website": "${plugin_site}",
"main": "xyz.webmc.${plugin_iden}.velocity.${plugin_name}Velocity", "main": "xyz.webmc.${plugin_iden}.velocity.${plugin_name}VelocityPlugin",
"authors": ${plugin_athr}, "authors": ${plugin_athr},
"dependencies": ${plugin_depc} "dependencies": ${plugin_depc}
} }