Skip to content

Commit

Permalink
feat(paper): Improved listeners registration performance
Browse files Browse the repository at this point in the history
  • Loading branch information
4drian3d committed May 11, 2023
1 parent 56443d2 commit 8963180
Show file tree
Hide file tree
Showing 8 changed files with 152 additions and 53 deletions.
83 changes: 61 additions & 22 deletions core/build.gradle.kts
@@ -1,6 +1,7 @@
plugins {
alias(libs.plugins.blossom)
alias(libs.plugins.indra)
`maven-publish`
signing
}

dependencies {
Expand Down Expand Up @@ -44,28 +45,66 @@ blossom {
}

// Publish to Maven Central
indra {
javaVersions {
testWith().add(11)
}
github("4drian3d", "EpicGuard") {
ci(true)
}
publishReleasesTo("OSSRH", "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/")
publishSnapshotsTo("SonatypeSnapshots", "https://s01.oss.sonatype.org/content/repositories/snapshots/")
gpl3OrLaterLicense()
configurePublications {
artifactId = "epicguard-api"
from(components["java"])

pom {
developers {
developer {
id.set("4drian3d")
name.set("Adrian Gonzales")
email.set("adriangonzalesval@gmail.com")
/*publishing {
publications {
create<MavenPublication>("maven") {
repositories {
maven {
credentials(PasswordCredentials::class)
val central = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
val snapshots = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
if (project.version.toString().endsWith("SNAPSHOT")) {
name = "SonatypeSnapshots"
setUrl(snapshots)
} else {
name = "OSSRH"
setUrl(central)
}
}
}
from(components["java"])
pom {
url.set("https://github.com/4drian3d/EpicGuard")
licenses {
license {
name.set("GNU General Public License version 3 or later")
url.set("https://opensource.org/licenses/GPL-3.0")
}
}
scm {
connection.set("scm:git:https://github.com/4drian3d/EpicGuard.git")
developerConnection.set("scm:git:ssh://git@github.com/4drian3d/EpicGuard.git")
url.set("https://github.com/4drian3d/EpicGuard")
}
developers {
developer {
id.set("4drian3d")
name.set("Adrian Gonzales")
email.set("adriangonzalesval@gmail.com")
}
developer {
id.set("awumii")
email.set("awumii@protonmail.com")
}
}
issueManagement {
name.set("GitHub")
url.set("https://github.com/4drian3d/EpicGuard/issues")
}
ciManagement {
name.set("GitHub Actions")
url.set("https://github.com/4drian3d/EpicGuard/actions")
}
name.set(project.name)
description.set(project.description)
url.set("https://github.com/4drian3d/EpicGuard")
}
artifactId = "epicguard-api"
}
}
}
}
signing {
useGpgCmd()
sign(configurations.archives.get())
sign(publishing.publications["maven"])
}*/
23 changes: 18 additions & 5 deletions paper/src/main/java/me/xneox/epicguard/paper/EpicGuardPaper.java
Expand Up @@ -16,6 +16,8 @@
package me.xneox.epicguard.paper;

import java.util.UUID;
import java.util.stream.Stream;

import me.xneox.epicguard.core.EpicGuard;
import me.xneox.epicguard.core.Platform;
import me.xneox.epicguard.paper.listener.PlayerPostLoginListener;
Expand All @@ -26,6 +28,7 @@
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand All @@ -40,11 +43,21 @@ public void onEnable() {
this.epicGuard = new EpicGuard(this);

var pluginManager = Bukkit.getPluginManager();
pluginManager.registerEvents(new PlayerPreLoginListener(this.epicGuard), this);
pluginManager.registerEvents(new PlayerQuitListener(this.epicGuard), this);
pluginManager.registerEvents(new PlayerPostLoginListener(this.epicGuard), this);
pluginManager.registerEvents(new ServerPingListener(this.epicGuard), this);
pluginManager.registerEvents(new PlayerSettingsListener(this.epicGuard), this);
final Listener listener = new Listener() {};
Stream.of(
new PlayerPreLoginListener(this.epicGuard),
new PlayerQuitListener(this.epicGuard),
new PlayerPostLoginListener(this.epicGuard),
new ServerPingListener(this.epicGuard),
new PlayerSettingsListener(this.epicGuard)
).forEach(handler -> pluginManager.registerEvent(
handler.clazz(),
listener,
handler.priority(),
(l, event) -> handler.handle(event),
this,
handler.ignoreCancelled()
));

this.getServer().getCommandMap()
.register("epicguard", new PaperCommandHandler(this.epicGuard, this));
Expand Down
@@ -0,0 +1,22 @@
package me.xneox.epicguard.paper.listener;

import org.bukkit.event.Event;
import org.bukkit.event.EventPriority;

public interface PaperListener<E extends Event> {
@SuppressWarnings("unchecked")
default void handle(Object o) {
this.handle((E)o);
}
void handle(E event);

Class<E> clazz();

default boolean ignoreCancelled() {
return true;
}

default EventPriority priority() {
return EventPriority.NORMAL;
}
}
Expand Up @@ -17,20 +17,23 @@

import me.xneox.epicguard.core.EpicGuard;
import me.xneox.epicguard.core.handler.PostLoginHandler;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import java.util.Objects;

public class PlayerPostLoginListener extends PostLoginHandler implements Listener {
public class PlayerPostLoginListener extends PostLoginHandler implements PaperListener<PlayerJoinEvent> {
public PlayerPostLoginListener(EpicGuard epicGuard) {
super(epicGuard);
}

@EventHandler
public void onJoin(PlayerJoinEvent event) {
@Override
public void handle(final PlayerJoinEvent event) {
var player = event.getPlayer();
this.onPostLogin(player.getUniqueId(), Objects.requireNonNull(player.getAddress()).getAddress().getHostAddress());
}

@Override
public Class<PlayerJoinEvent> clazz() {
return PlayerJoinEvent.class;
}
}
Expand Up @@ -17,22 +17,30 @@

import me.xneox.epicguard.core.EpicGuard;
import me.xneox.epicguard.core.handler.PreLoginHandler;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;

public class PlayerPreLoginListener extends PreLoginHandler implements Listener {
public class PlayerPreLoginListener extends PreLoginHandler implements PaperListener<AsyncPlayerPreLoginEvent> {
public PlayerPreLoginListener(EpicGuard epicGuard) {
super(epicGuard);
}

@EventHandler(priority = EventPriority.LOWEST)
public void onPreLogin(AsyncPlayerPreLoginEvent event) {
@Override
public void handle(AsyncPlayerPreLoginEvent event) {
final String address = event.getAddress().getHostAddress();
final String nickname = event.getName();

this.onPreLogin(address, nickname).ifPresent(result ->
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, result));
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, result));
}

@Override
public Class<AsyncPlayerPreLoginEvent> clazz() {
return AsyncPlayerPreLoginEvent.class;
}

@Override
public EventPriority priority() {
return EventPriority.LOWEST;
}
}
Expand Up @@ -17,17 +17,20 @@

import me.xneox.epicguard.core.EpicGuard;
import me.xneox.epicguard.core.handler.DisconnectHandler;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;

public class PlayerQuitListener extends DisconnectHandler implements Listener {
public class PlayerQuitListener extends DisconnectHandler implements PaperListener<PlayerQuitEvent> {
public PlayerQuitListener(EpicGuard epicGuard) {
super(epicGuard);
}

@EventHandler
public void onQuit(PlayerQuitEvent event) {
@Override
public void handle(final PlayerQuitEvent event) {
this.onDisconnect(event.getPlayer().getUniqueId());
}

@Override
public Class<PlayerQuitEvent> clazz() {
return PlayerQuitEvent.class;
}
}
Expand Up @@ -17,17 +17,20 @@

import me.xneox.epicguard.core.EpicGuard;
import me.xneox.epicguard.core.handler.SettingsHandler;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerLocaleChangeEvent;

public class PlayerSettingsListener extends SettingsHandler implements Listener {
public class PlayerSettingsListener extends SettingsHandler implements PaperListener<PlayerLocaleChangeEvent> {
public PlayerSettingsListener(EpicGuard epicGuard) {
super(epicGuard);
}

@EventHandler
public void onSettingsChanged(PlayerLocaleChangeEvent event) {
@Override
public void handle(PlayerLocaleChangeEvent event) {
this.onSettingsChanged(event.getPlayer().getUniqueId());
}

@Override
public Class<PlayerLocaleChangeEvent> clazz() {
return PlayerLocaleChangeEvent.class;
}
}
Expand Up @@ -17,18 +17,26 @@

import me.xneox.epicguard.core.EpicGuard;
import me.xneox.epicguard.core.handler.PingHandler;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.server.ServerListPingEvent;

public class ServerPingListener extends PingHandler implements Listener {
public class ServerPingListener extends PingHandler implements PaperListener<ServerListPingEvent> {
public ServerPingListener(EpicGuard epicGuard) {
super(epicGuard);
}

@EventHandler(priority = EventPriority.LOWEST)
public void onPing(ServerListPingEvent event) {
@Override
public void handle(ServerListPingEvent event) {
this.onPing(event.getAddress().getHostAddress());
}

@Override
public Class<ServerListPingEvent> clazz() {
return ServerListPingEvent.class;
}

@Override
public EventPriority priority() {
return EventPriority.LOWEST;
}
}

0 comments on commit 8963180

Please sign in to comment.