From bf1cb50c28815f7570aad1e66eb248d60674de1d Mon Sep 17 00:00:00 2001 From: Dmitrii Date: Thu, 16 Apr 2026 15:58:18 +0300 Subject: [PATCH] Add readme --- .gitignore | 1 + .vscode/settings.json | 4 + build.gradle.kts | 16 ++- settings.gradle.kts | 1 + .../yawaflua/tech/command/ReportCommand.java | 94 ++++++++++++++++ .../tech/database/DatabaseManager.java | 101 ++++++++++++++++++ .../yawaflua/tech/filter/ProfanityFilter.java | 41 +++++++ .../yawaflua/tech/listener/ChatListener.java | 70 ++++++++++++ .../tech/listener/PlayerJoinListener.java | 43 ++++++++ .../tech/listener/PlayerQuitListener.java | 21 ++++ .../yawaflua/tech/listener/PvPListener.java | 55 ++++++++++ .../git/yawaflua/tech/messages/Messages.java | 45 ++++++++ .../git/yawaflua/tech/model/PlayerData.java | 92 ++++++++++++++++ .../java/git/yawaflua/tech/pixeltalk.java | 66 +++++++++++- .../git/yawaflua/tech/pixeltalkLoader.java | 13 ++- .../questionnaire/QuestionnaireManager.java | 75 +++++++++++++ .../git/yawaflua/tech/score/ScoreManager.java | 65 +++++++++++ .../git/yawaflua/tech/tab/TabManager.java | 44 ++++++++ .../yawaflua/tech/voice/VoiceIntegration.java | 90 ++++++++++++++++ src/main/resources/config.yml | 101 ++++++++++++++++++ src/main/resources/paper-plugin.yml | 6 +- 21 files changed, 1035 insertions(+), 9 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 src/main/java/git/yawaflua/tech/command/ReportCommand.java create mode 100644 src/main/java/git/yawaflua/tech/database/DatabaseManager.java create mode 100644 src/main/java/git/yawaflua/tech/filter/ProfanityFilter.java create mode 100644 src/main/java/git/yawaflua/tech/listener/ChatListener.java create mode 100644 src/main/java/git/yawaflua/tech/listener/PlayerJoinListener.java create mode 100644 src/main/java/git/yawaflua/tech/listener/PlayerQuitListener.java create mode 100644 src/main/java/git/yawaflua/tech/listener/PvPListener.java create mode 100644 src/main/java/git/yawaflua/tech/messages/Messages.java create mode 100644 src/main/java/git/yawaflua/tech/model/PlayerData.java create mode 100644 src/main/java/git/yawaflua/tech/questionnaire/QuestionnaireManager.java create mode 100644 src/main/java/git/yawaflua/tech/score/ScoreManager.java create mode 100644 src/main/java/git/yawaflua/tech/tab/TabManager.java create mode 100644 src/main/java/git/yawaflua/tech/voice/VoiceIntegration.java create mode 100644 src/main/resources/config.yml diff --git a/.gitignore b/.gitignore index 9e4b940..cdbe567 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ out/ *.iml # mpeltonen/sbt-idea plugin .idea_modules/ +server # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..b84f89c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "java.configuration.updateBuildConfiguration": "interactive", + "java.compile.nullAnalysis.mode": "automatic" +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index bc875ae..3db54df 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,21 +6,29 @@ plugins { repositories { mavenCentral() maven("https://repo.papermc.io/repository/maven-public/") + maven("https://repo.plasmoverse.com/releases") } dependencies { compileOnly("io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT") + // MongoDB driver (will be loaded at runtime via PluginLoader) + compileOnly("org.mongodb:mongodb-driver-sync:5.0.1") + + // PlasmoVoice API (optional) + compileOnly("su.plo.voice.api:server:2.1.8") } java { - toolchain.languageVersion = JavaLanguageVersion.of(21) + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 +} + +tasks.withType { + options.release.set(21) } tasks { runServer { - // Configure the Minecraft version for our task. - // This is the only required configuration besides applying the plugin. - // Your plugin's jar (or shadowJar if present) will be used automatically. minecraftVersion("1.21.11") jvmArgs("-Xms2G", "-Xmx2G") } diff --git a/settings.gradle.kts b/settings.gradle.kts index e0f29d0..62d18cf 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1 +1,2 @@ rootProject.name = "PixelTalk" + diff --git a/src/main/java/git/yawaflua/tech/command/ReportCommand.java b/src/main/java/git/yawaflua/tech/command/ReportCommand.java new file mode 100644 index 0000000..68677e1 --- /dev/null +++ b/src/main/java/git/yawaflua/tech/command/ReportCommand.java @@ -0,0 +1,94 @@ +package git.yawaflua.tech.command; + +import git.yawaflua.tech.database.DatabaseManager; +import git.yawaflua.tech.messages.Messages; +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import io.papermc.paper.command.brigadier.BasicCommand; +import io.papermc.paper.command.brigadier.CommandSourceStack; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class ReportCommand implements BasicCommand { + + private final DatabaseManager databaseManager; + private final git.yawaflua.tech.voice.VoiceIntegration voiceIntegration; + private final Map cooldowns = new HashMap<>(); + private final long cooldownMs; + + public ReportCommand(DatabaseManager databaseManager, FileConfiguration config, git.yawaflua.tech.voice.VoiceIntegration voiceIntegration) { + this.databaseManager = databaseManager; + this.voiceIntegration = voiceIntegration; + this.cooldownMs = config.getLong("report.cooldown-seconds", 60) * 1000L; + } + + @Override + public void execute(@NotNull CommandSourceStack stack, @NotNull String[] args) { + CommandSender sender = stack.getSender(); + if (!(sender instanceof Player player)) { + sender.sendMessage(Messages.parse(Messages.ONLY_PLAYERS)); + return; + } + + if (args.length < 2) { + player.sendMessage(Messages.parse(Messages.REPORT_USAGE)); + return; + } + + UUID uuid = player.getUniqueId(); + long now = System.currentTimeMillis(); + long lastReport = cooldowns.getOrDefault(uuid, 0L); + + if (now - lastReport < cooldownMs) { + long remaining = (cooldownMs - (now - lastReport)) / 1000; + player.sendMessage(Messages.parse(Messages.REPORT_COOLDOWN.replace("