From 46f045fb82b5c80c4101b6120321dafe581a317f Mon Sep 17 00:00:00 2001 From: rattatwinko Date: Sun, 27 Apr 2025 18:25:01 +0200 Subject: [PATCH] initial commit pluginhider v1 --- .gitignore | 113 ++++++++++++++++++ pom.xml | 87 ++++++++++++++ .../kotlin/org/plughide/plughide/Plughide.kt | 76 ++++++++++++ src/main/resources/plugin.yml | 6 + 4 files changed, 282 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/kotlin/org/plughide/plughide/Plughide.kt create mode 100644 src/main/resources/plugin.yml 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..824fb3d --- /dev/null +++ b/pom.xml @@ -0,0 +1,87 @@ + + + 4.0.0 + + org.plughide + plughide + 1.0-SNAPSHOT + jar + + plughide + + + 21 + 2.2.0-Beta1 + UTF-8 + + + + clean package + ${project.basedir}/src/main/kotlin + + + org.jetbrains.kotlin + kotlin-maven-plugin + ${kotlin.version} + + + compile + compile + + compile + + + + + ${java.version} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.5.3 + + + package + + shade + + + + + + + + src/main/resources + true + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + + + + io.papermc.paper + paper-api + 1.21.5-R0.1-SNAPSHOT + provided + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + ${kotlin.version} + + + diff --git a/src/main/kotlin/org/plughide/plughide/Plughide.kt b/src/main/kotlin/org/plughide/plughide/Plughide.kt new file mode 100644 index 0000000..880f828 --- /dev/null +++ b/src/main/kotlin/org/plughide/plughide/Plughide.kt @@ -0,0 +1,76 @@ +package org.plughide.plughide + +import org.bukkit.Bukkit +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.Listener +import org.bukkit.event.player.PlayerCommandPreprocessEvent +import org.bukkit.event.server.TabCompleteEvent +import org.bukkit.plugin.java.JavaPlugin + +class PlugHide : JavaPlugin(), Listener { + + private val blockedCommands = listOf( + "/pl", "/plugins", "/plugin", "/bukkit:pl", "/bukkit:plugins", "/bukkit:plugin", + "/minecraft:pl", "/minecraft:plugins", "/minecraft:plugin", + "/ver", "/version", "/bukkit:ver", "/bukkit:version", + "/minecraft:ver", "/minecraft:version", + "/about", "/bukkit:about", "/minecraft:about", + "/help", "/bukkit:help", "/minecraft:help", + "/?", "/bukkit:?", "/minecraft:?" + ) + + override fun onEnable() { + logger.info("PlugHide has been enabled!") + server.pluginManager.registerEvents(this, this) + } + + override fun onDisable() { + logger.info("PlugHide has been disabled!") + } + + @EventHandler(priority = EventPriority.HIGHEST) + fun onPlayerCommand(event: PlayerCommandPreprocessEvent) { + val player = event.player + val command = event.message.split(" ")[0].lowercase() + + // Allow OPs to use any command + if (player.isOp) return + + // Block restricted commands for non-OPs + if (blockedCommands.contains(command)) { + event.isCancelled = true + player.sendMessage("§cUnknown command. Type \"/help\" for help.") + logger.info("Player ${player.name} attempted to use blocked command: $command") + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + fun onTabComplete(event: TabCompleteEvent) { + val sender = event.sender + val buffer = event.buffer.lowercase() + + // Don't filter tab completion for OPs + if (sender.isOp) return + + // Block tab completion for sensitive commands + if (blockedCommands.any { buffer.startsWith(it) } || + buffer == "/" || + buffer.startsWith("/bukkit:") || + buffer.startsWith("/minecraft:")) { + + // Filter out any plugin-related suggestions + val filtered = event.completions.filter { completion -> + val completionLower = completion.lowercase() + !completionLower.contains("plugin") && + !completionLower.contains("version") && + !completionLower.contains("about") && + !completionLower.contains("bukkit") && + !completionLower.contains("spigot") && + !completionLower.contains("paper") + } + + event.completions = filtered + } + } +} \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..fd5ea05 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,6 @@ +name: PlugHide +version: 1.0-SNAPSHOT +main: org.plughide.plughide.PlugHide +api-version: 1.21 +description: Hides plugin information and commands from non-OP players +author: suckmyballs (rattatwinko) \ No newline at end of file