Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
To learn more about configuration, usage and features of BanManager, take a look at [the website](https://banmanagement.com/docs/banmanager/configuration) or view [the website demo](https://demo.banmanagement.com).

## Requirements
- Java 8+ (JDK21+ required to build from source)
- Java 17+ (JDK21+ required to build from source)
- CraftBukkit/Spigot/Paper, BungeeCord or Sponge for Minecraft 1.7.2+
- Optionally [MySQL or MariaDB](https://banmanagement.com/docs/banmanager/install#setup-shared-database-optional)

Expand Down
8 changes: 4 additions & 4 deletions buildSrc/src/main/kotlin/CommonConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ fun Project.applyCommonConfiguration() {
}

dependencies {
"compileOnly"("org.projectlombok:lombok:1.18.36")
"annotationProcessor"("org.projectlombok:lombok:1.18.36")
"compileOnly"("org.projectlombok:lombok:1.18.38")
"annotationProcessor"("org.projectlombok:lombok:1.18.38")

"testCompileOnly"("org.projectlombok:lombok:1.18.36")
"testAnnotationProcessor"("org.projectlombok:lombok:1.18.36")
"testCompileOnly"("org.projectlombok:lombok:1.18.38")
"testAnnotationProcessor"("org.projectlombok:lombok:1.18.38")
}

configurations.all {
Expand Down
8 changes: 1 addition & 7 deletions buildSrc/src/main/kotlin/PlatformConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,12 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import com.github.jengelman.gradle.plugins.shadow.ShadowExtension
import org.gradle.api.Project
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.plugins.quality.CheckstyleExtension
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.tasks.javadoc.Javadoc
import org.gradle.api.tasks.testing.Test
import org.gradle.external.javadoc.StandardJavadocDocletOptions
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.get
import org.gradle.kotlin.dsl.named
import org.gradle.kotlin.dsl.register
import org.gradle.kotlin.dsl.withType
import org.gradle.kotlin.dsl.the

Expand All @@ -34,7 +28,7 @@ fun Project.applyPlatformAndCoreConfiguration() {

ext["internalVersion"] = internalVersion

// Java 8 turns on doclint which we fail
// Suppress doclint to keep javadoc builds green; tags below document supported custom tags.
tasks.withType<Javadoc>().configureEach {
(options as StandardJavadocDocletOptions).apply {
addStringOption("Xdoclint:none", "-quiet")
Expand Down
2 changes: 0 additions & 2 deletions buildSrc/src/main/kotlin/Versions.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
object Versions {
const val JUNIT = "4.13"
const val MOCKITO = "3.7.7"
const val ADVENTURE = "4.21.0"
}
31 changes: 24 additions & 7 deletions bukkit/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,9 @@ dependencies {
"compileOnly"("net.kyori:adventure-api:${Versions.ADVENTURE}")
"compileOnly"("net.kyori:adventure-text-serializer-gson:${Versions.ADVENTURE}")
"compileOnly"("net.kyori:adventure-text-serializer-json:${Versions.ADVENTURE}")
"compileOnly"("me.clip:placeholderapi:2.10.9")
"shadeOnly"("org.bstats:bstats-bukkit:2.2.1")
"shadeOnly"("org.slf4j:slf4j-api:1.7.36")
"compileOnly"("me.clip:placeholderapi:2.12.2")
"shadeOnly"("org.bstats:bstats-bukkit:3.2.1")
"shadeOnly"("org.slf4j:slf4j-api:2.0.17")
}

tasks.named<Copy>("processResources") {
Expand Down Expand Up @@ -119,15 +119,23 @@ tasks.named<ShadowJar>("shadowJar") {

include(dependency("org.bstats:.*:.*"))
include(dependency("org.slf4j:.*:.*"))

relocate("org.bstats", "me.confuser.banmanager.common.bstats")
relocate("org.slf4j", "me.confuser.banmanager.common.slf4j")
}

// Relocate at task level so resource paths and service file contents are
// also rewritten (the SLF4J 2.x ServiceLoader needs the META-INF/services
// entry to be relocated to the shaded package).
relocate("org.bstats", "me.confuser.banmanager.common.bstats")
relocate("org.slf4j", "me.confuser.banmanager.common.slf4j")

// Required for SLF4J 2.x service discovery: merges + relocates the
// META-INF/services/org.slf4j.spi.SLF4JServiceProvider entry.
mergeServiceFiles()

exclude("GradleStart**")
exclude(".cache");
exclude("LICENSE*")
exclude("META-INF/services/**")
// Keep META-INF/services so the relocated SLF4J 2.x ServiceLoader can find
// BanManagerSlf4jServiceProvider; shaded deps here ship no service files.
exclude("META-INF/maven/**")
exclude("org/intellij/**")
exclude("org/jetbrains/**")
Expand All @@ -137,6 +145,15 @@ tasks.named<ShadowJar>("shadowJar") {
minimize {
exclude(dependency("org.bstats:.*:.*"))
exclude(dependency("org.slf4j:.*:.*"))
// JDBC drivers, HikariCP and ORMLite load codecs / dialects / drivers
// via ServiceLoader. Static analysis can't see those references, so
// exclude them from minimisation to avoid stripping classes that are
// listed in the merged META-INF/services entries.
exclude(dependency("org.mariadb.jdbc:mariadb-java-client:.*"))
exclude(dependency("com.mysql:mysql-connector-j:.*"))
exclude(dependency("com.zaxxer:HikariCP:.*"))
exclude(dependency("com.j256.ormlite:.*:.*"))
exclude(dependency("com.h2database:.*:.*"))
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import me.confuser.banmanager.bukkit.api.events.*;
import me.confuser.banmanager.common.BanManagerPlugin;
import me.confuser.banmanager.common.listeners.CommonWebhookListener;
import me.confuser.banmanager.common.listeners.CommonWebhookListener.WebhookData;
import me.confuser.banmanager.common.data.Webhook;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
Expand All @@ -19,62 +19,62 @@ public WebhookListener(BanManagerPlugin plugin) {

@EventHandler(priority = EventPriority.MONITOR)
public void notifyOnBan(PlayerBannedEvent event) {
List<WebhookData> webhooks = listener.notifyOnBan(event.getBan());
List<Webhook> webhooks = listener.notifyOnBan(event.getBan());
sendAll(webhooks, event.isSilent());
}

@EventHandler(priority = EventPriority.MONITOR)
public void notifyOnMute(PlayerMutedEvent event) {
List<WebhookData> webhooks = listener.notifyOnMute(event.getMute());
List<Webhook> webhooks = listener.notifyOnMute(event.getMute());
sendAll(webhooks, event.isSilent());
}

@EventHandler(priority = EventPriority.MONITOR)
public void notifyOnBan(IpBannedEvent event) {
List<WebhookData> webhooks = listener.notifyOnBan(event.getBan());
List<Webhook> webhooks = listener.notifyOnBan(event.getBan());
sendAll(webhooks, event.isSilent());
}

@EventHandler(priority = EventPriority.MONITOR)
public void notifyOnKick(PlayerKickedEvent event) {
List<WebhookData> webhooks = listener.notifyOnKick(event.getKick());
List<Webhook> webhooks = listener.notifyOnKick(event.getKick());
sendAll(webhooks, event.isSilent());
}

@EventHandler(priority = EventPriority.MONITOR)
public void notifyOnWarn(PlayerWarnedEvent event) {
List<WebhookData> webhooks = listener.notifyOnWarn(event.getWarning());
List<Webhook> webhooks = listener.notifyOnWarn(event.getWarning());
sendAll(webhooks, event.isSilent());
}

@EventHandler(priority = EventPriority.MONITOR)
public void notifyOnUnban(PlayerUnbanEvent event) {
List<WebhookData> webhooks = listener.notifyOnUnban(event.getBan(), event.getActor(), event.getReason());
List<Webhook> webhooks = listener.notifyOnUnban(event.getBan(), event.getActor(), event.getReason());
sendAll(webhooks, event.isSilent());
}

@EventHandler(priority = EventPriority.MONITOR)
public void notifyOnUnban(IpUnbanEvent event) {
List<WebhookData> webhooks = listener.notifyOnUnban(event.getBan(), event.getActor(), event.getReason());
List<Webhook> webhooks = listener.notifyOnUnban(event.getBan(), event.getActor(), event.getReason());
sendAll(webhooks, event.isSilent());
}

@EventHandler(priority = EventPriority.MONITOR)
public void notifyOnUnmute(PlayerUnmuteEvent event) {
List<WebhookData> webhooks = listener.notifyOnUnmute(event.getMute(), event.getActor(), event.getReason());
List<Webhook> webhooks = listener.notifyOnUnmute(event.getMute(), event.getActor(), event.getReason());
sendAll(webhooks, event.isSilent());
}

@EventHandler(priority = EventPriority.MONITOR)
public void notifyOnReport(PlayerReportedEvent event) {
List<WebhookData> webhooks = listener.notifyOnReport(event.getReport(), event.getReport().getActor(), event.getReport().getReason());
List<Webhook> webhooks = listener.notifyOnReport(event.getReport(), event.getReport().getActor(), event.getReport().getReason());
sendAll(webhooks, event.isSilent());
}

private void sendAll(List<WebhookData> webhooks, boolean isSilent) {
for (WebhookData data : webhooks) {
if (isSilent && data.ignoreSilent) continue;
if (data.url == null || data.payload == null || data.url.isEmpty() || data.payload.isEmpty()) continue;
private void sendAll(List<Webhook> webhooks, boolean isSilent) {
for (Webhook data : webhooks) {
if (isSilent && data.ignoreSilent()) continue;
if (data.url() == null || data.payload() == null || data.url().isEmpty() || data.payload().isEmpty()) continue;
listener.sendAsync(data);
}
}
Expand Down
Loading
Loading