From c48bb701f28c7d715a7c06b1feddcea7e72d3ece Mon Sep 17 00:00:00 2001 From: FirephoenixX02 Date: Thu, 6 Jun 2024 17:08:54 +0200 Subject: [PATCH] Initial Commit --- .gitignore | 113 +++++++++++ pom.xml | 179 ++++++++++++++++++ .../velocitylogging/VelocityLogging.java | 110 +++++++++++ .../listener/ChatCommandListener.java | 29 +++ 4 files changed, 431 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/me/firephoenix/velocitylogging/VelocityLogging.java create mode 100644 src/main/java/me/firephoenix/velocitylogging/listener/ChatCommandListener.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4788b4b --- /dev/null +++ b/.gitignore @@ -0,0 +1,113 @@ +# User-specific stuff +.idea/ + +*.iml +*.ipr +*.iws + +# IntelliJ +out/ + +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +target/ + +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next + +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +.flattened-pom.xml + +# Common working directory +run/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..5cd205b --- /dev/null +++ b/pom.xml @@ -0,0 +1,179 @@ + + + 4.0.0 + + me.firephoenix + VelocityLogging + 1.0 + jar + + VelocityLogging + + + 17 + UTF-8 + + + + + release + + + + org.apache.maven.plugins + maven-source-plugin + 3.2.0 + + + attach-sources + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.2.0 + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + + + + src/main/resources + true + + + + + + + + + + ${project.basedir}/src/main/resources + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + org.codehaus.mojo + templating-maven-plugin + 1.0.0 + + + filter-src + + filter-sources + + + + + + org.apache.maven.plugins + maven-site-plugin + 3.9.1 + + + net.trajano.wagon + wagon-git + 2.0.4 + + + org.apache.maven.doxia + doxia-module-markdown + 1.9.1 + + + + + org.apache.maven.plugins + maven-release-plugin + 3.0.0-M1 + + true + @{project.version} + [RELEASE] + install deploy site-deploy + release + + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.2.0 + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + maven_central + Maven Central + https://repo.maven.apache.org/maven2/ + + + + + + com.velocitypowered + velocity-api + 3.3.0-SNAPSHOT + provided + + + org.projectlombok + lombok + 1.18.30 + provided + + + org.projectlombok + lombok + 1.18.30 + provided + + + diff --git a/src/main/java/me/firephoenix/velocitylogging/VelocityLogging.java b/src/main/java/me/firephoenix/velocitylogging/VelocityLogging.java new file mode 100644 index 0000000..a3ff652 --- /dev/null +++ b/src/main/java/me/firephoenix/velocitylogging/VelocityLogging.java @@ -0,0 +1,110 @@ +package me.firephoenix.velocitylogging; + +import com.google.inject.Inject; +import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; +import com.velocitypowered.api.event.Subscribe; +import com.velocitypowered.api.plugin.Plugin; +import com.velocitypowered.api.plugin.annotation.DataDirectory; +import com.velocitypowered.api.proxy.ProxyServer; +import lombok.Getter; +import me.firephoenix.velocitylogging.listener.ChatCommandListener; +import org.slf4j.Logger; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +@Plugin( + id = "velocitylogging", + name = "VelocityLogging", + version = "1.0" +) +public class VelocityLogging { + + private static final ExecutorService executor = Executors.newSingleThreadExecutor(); + public static VelocityLogging INSTANCE; + private final ProxyServer server; + @Getter + private final Logger logger; + public Path dataFolderPath; + + @Inject + public VelocityLogging(ProxyServer server, Logger logger, @DataDirectory final Path folder) { + this.server = server; + this.logger = logger; + this.dataFolderPath = folder; + } + + @Subscribe + public void onProxyInitialization(ProxyInitializeEvent event) { + setInstance(this); + + server.getEventManager().register(this, new ChatCommandListener()); + + createLogFolderAndFileIfItNotExists(); + } + + public void setInstance(VelocityLogging INSTANCE) { + VelocityLogging.INSTANCE = INSTANCE; + } + + public void addToLogFile(String messageOrCommand, String playerName, String server) { + executor.execute(() -> { + LocalDate date = LocalDate.now(); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + + String formattedDate = date.format(formatter); + + Path logFilePath = Path.of(dataFolderPath + "/" + formattedDate + ".log"); + + if (!logFilePath.toFile().exists()) createLogFolderAndFileIfItNotExists(); + + try (BufferedWriter writer = new BufferedWriter(new FileWriter(logFilePath.toFile()))) { + String logLine = "[" + playerName + "] " + + "[" + server + "]:" + + messageOrCommand; + + writer.write(logLine); + writer.newLine(); + } catch (Exception e) { + e.printStackTrace(); + } + }); + } + + public void createLogFolderAndFileIfItNotExists() { + File folder = dataFolderPath.toFile(); + + LocalDate date = LocalDate.now(); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + + String formattedDate = date.format(formatter); + + File file = new File(folder, formattedDate + ".log"); + + if (!file.getParentFile().exists()) { + boolean created = file.getParentFile().mkdirs(); + if (!created) { + throw new RuntimeException("Failed to create directories for log file."); + } + } + + if (!file.exists()) { + try { + Files.createFile(file.toPath()); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("Failed to create log file."); + } + } + } + +} diff --git a/src/main/java/me/firephoenix/velocitylogging/listener/ChatCommandListener.java b/src/main/java/me/firephoenix/velocitylogging/listener/ChatCommandListener.java new file mode 100644 index 0000000..f88a8cf --- /dev/null +++ b/src/main/java/me/firephoenix/velocitylogging/listener/ChatCommandListener.java @@ -0,0 +1,29 @@ +package me.firephoenix.velocitylogging.listener; + +import com.velocitypowered.api.event.Subscribe; +import com.velocitypowered.api.event.command.CommandExecuteEvent; +import com.velocitypowered.api.event.player.PlayerChatEvent; +import com.velocitypowered.api.proxy.Player; +import me.firephoenix.velocitylogging.VelocityLogging; + +/** + * @author NieGestorben + * Copyright© (c) 2024, All Rights Reserved. + */ +public class ChatCommandListener { + + @Subscribe + public void onChatEvent(PlayerChatEvent event) { + Player player = event.getPlayer(); + + VelocityLogging.INSTANCE.addToLogFile(event.getMessage(), player.getUsername(), player.getCurrentServer().isEmpty() ? "Unknown" : player.getCurrentServer().get().getServerInfo().getName()); + } + + @Subscribe + public void onCommand(CommandExecuteEvent event) { + if (!(event.getCommandSource() instanceof Player player)) return; + + VelocityLogging.INSTANCE.addToLogFile(event.getCommand(), player.getUsername(), player.getCurrentServer().isEmpty() ? "Unknown" : player.getCurrentServer().get().getServerInfo().getName()); + } + +}