Skip to content

Commit

Permalink
perf: Avoid creating concatenated strings if the debug mode is not ac…
Browse files Browse the repository at this point in the history
…tivated
  • Loading branch information
4drian3d committed Feb 16, 2023
1 parent 5ac4c45 commit 5875be4
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 116 deletions.
Expand Up @@ -68,7 +68,7 @@ public PreLoginHandler(EpicGuard epicGuard) {
*/
@NotNull
public Optional<TextComponent> onPreLogin(@NotNull String address, @NotNull String nickname) {
LogUtils.debug("Handling incoming connection: " + address + "/" + nickname);
LogUtils.debug(() -> "Handling incoming connection: " + address + "/" + nickname);

// Increment the connections per second and check if it's bigger than max-cps in config.
if (this.epicGuard.attackManager().incrementConnectionCounter() >= this.epicGuard.config().misc().attackConnectionThreshold()) {
Expand All @@ -78,19 +78,19 @@ public Optional<TextComponent> onPreLogin(@NotNull String address, @NotNull Stri

// Check if the user is whitelisted, if yes, return empty result (undetected).
if (this.epicGuard.storageManager().addressMeta(address).whitelisted()) {
LogUtils.debug("Skipping whitelisted user: " + address + "/" + nickname);
LogUtils.debug(() -> "Skipping whitelisted user: " + address + "/" + nickname);
return Optional.empty();
}

var user = new ConnectingUser(address, nickname);
for (AbstractCheck check : this.pipeline) {
if (check.isDetected(user)) {
LogUtils.debug(nickname + "/" + address + " detected by " + check.getClass().getSimpleName());
LogUtils.debug(() -> nickname + "/" + address + " detected by " + check.getClass().getSimpleName());
return Optional.of(check.detectionMessage());
}
}

LogUtils.debug(nickname + "/" + address + " has passed all checks and is allowed to connect.");
LogUtils.debug(() -> nickname + "/" + address + " has passed all checks and is allowed to connect.");
this.epicGuard.storageManager().updateAccounts(user);
return Optional.empty();
}
Expand Down
13 changes: 13 additions & 0 deletions core/src/main/java/me/xneox/epicguard/core/util/LogUtils.java
Expand Up @@ -19,6 +19,8 @@
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;

import java.util.function.Supplier;

/**
* This util helps with various logging operations.
*/
Expand Down Expand Up @@ -53,4 +55,15 @@ public static void debug(@NotNull String message) {
LOGGER.info("(Debug) {}", message);
}
}

/**
* Logs a message if debug is enabled in the configuration.
*
* @param message message to be logged
*/
public static void debug(@NotNull Supplier<String> message) {
if (EpicGuardAPI.INSTANCE.instance().config().misc().debug()) {
LOGGER.info("(Debug) {}", message.get());
}
}
}
2 changes: 1 addition & 1 deletion gradle.properties
@@ -1,5 +1,5 @@
group = me.xneox
version = 7.2.0
version = 7.2.1-SNAPSHOT
description=Bot protection system for Minecraft servers.

org.gradle.caching=true
Expand Down
6 changes: 0 additions & 6 deletions gradle/libs.versions.toml
Expand Up @@ -8,7 +8,6 @@ waterfall="1.19-R0.1-SNAPSHOT"
paper = "1.19.3-R0.1-SNAPSHOT"

libby = "1.1.5"
bstats = "3.0.1"
configurate = "4.1.2"
miniplaceholders = "1.3.1"

Expand Down Expand Up @@ -53,11 +52,6 @@ velocity = { group = "com.velocitypowered", name = "velocity-api", version.ref
paper = { group = "io.papermc.paper", name = "paper-api", version.ref = "paper" }
waterfall = { group = "io.github.waterfallmc", name = "waterfall-api", version.ref = "waterfall" }

# BStats
bstats-velocity = { module = "org.bstats:bstats-velocity", version.ref = "bstats" }
bstats-bukkit = { module = "org.bstats:bstats-bukkit", version.ref = "bstats" }
bstats-waterfall = { module = "org.bstats:bstats-waterfall", version.ref = "bstats" }

configurate = { module = "org.spongepowered:configurate-hocon", version.ref = "configurate" }
miniplaceholders = { group = "com.github.4drian3d", name = "MiniPlaceholders", version.ref = "miniplaceholders" }

Expand Down
209 changes: 104 additions & 105 deletions velocity/src/main/java/me/xneox/epicguard/velocity/EpicGuardVelocity.java
Expand Up @@ -22,121 +22,120 @@
import com.velocitypowered.api.plugin.Plugin;
import com.velocitypowered.api.plugin.annotation.DataDirectory;
import com.velocitypowered.api.proxy.ProxyServer;

import java.nio.file.Path;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import me.xneox.epicguard.core.EpicGuard;
import me.xneox.epicguard.core.Platform;
import me.xneox.epicguard.core.util.VersionUtils;
import me.xneox.epicguard.velocity.listener.DisconnectListener;
import me.xneox.epicguard.velocity.listener.PlayerSettingsListener;
import me.xneox.epicguard.velocity.listener.PostLoginListener;
import me.xneox.epicguard.velocity.listener.PreLoginListener;
import me.xneox.epicguard.velocity.listener.ServerPingListener;
import me.xneox.epicguard.velocity.listener.*;
import net.byteflux.libby.Library;
import net.byteflux.libby.VelocityLibraryManager;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;

import java.nio.file.Path;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

@Plugin(
id = "epicguard",
name = "EpicGuard",
version = VersionUtils.CURRENT_VERSION,
description = "Bot protection system for Minecraft servers.",
url = "https://github.com/xxneox/EpicGuard",
authors = {"neox", "4drian3d"})
id = "epicguard",
name = "EpicGuard",
version = VersionUtils.CURRENT_VERSION,
description = "Bot protection system for Minecraft servers.",
url = "https://github.com/xxneox/EpicGuard",
authors = {"neox", "4drian3d"})
public class EpicGuardVelocity implements Platform {
private final ProxyServer server;
private final Logger logger;
private final Path path;

private EpicGuard epicGuard;

@Inject
public EpicGuardVelocity(ProxyServer server, Logger logger, @DataDirectory Path path) {
this.server = server;
this.logger = logger;
this.path = path;
}

@Subscribe
public void onEnable(ProxyInitializeEvent e) {
this.loadLibraries();
this.epicGuard = new EpicGuard(this);

var commandManager = this.server.getCommandManager();
var meta = commandManager
.metaBuilder("epicguard")
.aliases("guard", "epicguardvelocity", "guardvelocity")
.plugin(this)
.build();

commandManager.register(meta, new VelocityCommandHandler(this.epicGuard));

var eventManager = this.server.getEventManager();
eventManager.register(this, new PostLoginListener(this.epicGuard));
eventManager.register(this, new PreLoginListener(this.epicGuard));
eventManager.register(this, new DisconnectListener(this.epicGuard));
eventManager.register(this, new ServerPingListener(this.epicGuard));
eventManager.register(this, new PlayerSettingsListener(this.epicGuard));
}

@Subscribe
public void onDisable(ProxyShutdownEvent e) {
this.epicGuard.shutdown();
}

@Override
public @NotNull String platformVersion() {
return this.server.getVersion().toString();
}

@Override
public @NotNull Logger logger() {
return this.logger;
}

@Override
public Audience audience(@NotNull UUID uuid) {
return this.server.getPlayer(uuid).orElse(null);
}

@Override
public void disconnectUser(@NotNull UUID uuid, @NotNull Component message) {
this.server.getPlayer(uuid).ifPresent(player -> player.disconnect(message));
}

@Override
public void runTaskLater(@NotNull Runnable task, long seconds) {
this.server.getScheduler().buildTask(this, task).delay(seconds, TimeUnit.SECONDS).schedule();
}

@Override
public void scheduleRepeatingTask(@NotNull Runnable task, long seconds) {
this.server.getScheduler().buildTask(this, task).repeat(seconds, TimeUnit.SECONDS).schedule();
}

private void loadLibraries() {
final VelocityLibraryManager<EpicGuardVelocity> manager
= new VelocityLibraryManager<>(this.logger, this.path, this.server.getPluginManager(), this);

final Library MYSQL = Library.builder()
.groupId("mysql")
.artifactId("mysql-connector-java")
.version("8.0.32")
.build();

final Library SQLITE = Library.builder()
.groupId("org{}xerial")
.artifactId("sqlite-jdbc")
.version("3.40.1.0")
.build();

manager.addMavenCentral();
manager.loadLibrary(MYSQL);
manager.loadLibrary(SQLITE);
}
private final ProxyServer server;
private final Logger logger;
private final Path path;

private EpicGuard epicGuard;

@Inject
public EpicGuardVelocity(ProxyServer server, Logger logger, @DataDirectory Path path) {
this.server = server;
this.logger = logger;
this.path = path;
}

@Subscribe
public void onEnable(ProxyInitializeEvent e) {
this.loadLibraries();
this.epicGuard = new EpicGuard(this);

var commandManager = this.server.getCommandManager();
var meta = commandManager
.metaBuilder("epicguard")
.aliases("guard", "epicguardvelocity", "guardvelocity")
.plugin(this)
.build();

commandManager.register(meta, new VelocityCommandHandler(this.epicGuard));

var eventManager = this.server.getEventManager();
eventManager.register(this, new PostLoginListener(this.epicGuard));
eventManager.register(this, new PreLoginListener(this.epicGuard));
eventManager.register(this, new DisconnectListener(this.epicGuard));
eventManager.register(this, new ServerPingListener(this.epicGuard));
eventManager.register(this, new PlayerSettingsListener(this.epicGuard));
}

@Subscribe
public void onDisable(ProxyShutdownEvent e) {
this.epicGuard.shutdown();
}

@Override
public @NotNull String platformVersion() {
return this.server.getVersion().toString();
}

@Override
public @NotNull Logger logger() {
return this.logger;
}

@Override
public Audience audience(@NotNull UUID uuid) {
return this.server.getPlayer(uuid).orElse(null);
}

@Override
public void disconnectUser(@NotNull UUID uuid, @NotNull Component message) {
this.server.getPlayer(uuid).ifPresent(player -> player.disconnect(message));
}

@Override
public void runTaskLater(@NotNull Runnable task, long seconds) {
this.server.getScheduler().buildTask(this, task).delay(seconds, TimeUnit.SECONDS).schedule();
}

@Override
public void scheduleRepeatingTask(@NotNull Runnable task, long seconds) {
this.server.getScheduler().buildTask(this, task).repeat(seconds, TimeUnit.SECONDS).schedule();
}

private void loadLibraries() {
final VelocityLibraryManager<EpicGuardVelocity> manager
= new VelocityLibraryManager<>(this.logger, this.path, this.server.getPluginManager(), this);

final Library MYSQL = Library.builder()
.groupId("com.mysql")
.artifactId("mysql-connector-j")
.version("8.0.32")
.id("mysql")
.build();

final Library SQLITE = Library.builder()
.groupId("org{}xerial")
.artifactId("sqlite-jdbc")
.version("3.40.1.0")
.id("sqlite")
.id("mysql")
.build();

manager.addMavenCentral();
manager.loadLibrary(SQLITE);
manager.loadLibrary(MYSQL);
}
}

0 comments on commit 5875be4

Please sign in to comment.