From 1e7d845822a16faa2fb741e531f4ce912c4cad73 Mon Sep 17 00:00:00 2001 From: RedSavant Date: Wed, 25 Mar 2026 19:09:09 +0100 Subject: [PATCH] Paper handle ! --- .gitignore | 10 ++++ bukkit/src/main/resources/plugin.yml | 7 ++- paper/build.gradle.kts | 26 +++++++++ .../main/java/fr/redsavant/LagoonPlugin.java | 53 +++++++++++++++++++ .../fr/redsavant/commands/MuteCommand.java | 53 +++++++++++++++++++ paper/src/main/resources/paper-plugin.yml | 20 +++++++ settings.gradle.kts | 2 +- 7 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 paper/build.gradle.kts create mode 100644 paper/src/main/java/fr/redsavant/LagoonPlugin.java create mode 100644 paper/src/main/java/fr/redsavant/commands/MuteCommand.java create mode 100644 paper/src/main/resources/paper-plugin.yml diff --git a/.gitignore b/.gitignore index 5c6c6eb..6e7d46c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,16 @@ .idea/ .gradle build/ + +# Spigot +bukkit/build +!bukkit/build/libs/ + +# Paper +paper/run/ +paper/build/ +!paper/build/libs/ + !gradle/wrapper/gradle-wrapper.jar !**/src/main/**/build/ !**/src/test/**/build/ diff --git a/bukkit/src/main/resources/plugin.yml b/bukkit/src/main/resources/plugin.yml index 5485e75..2112af3 100644 --- a/bukkit/src/main/resources/plugin.yml +++ b/bukkit/src/main/resources/plugin.yml @@ -11,4 +11,9 @@ commands: proximity: description: Base command usage: /proximity mute - permission: lagoon.admin \ No newline at end of file + permission: lagoon.admin + +permissions: + lagoon.admin: + description: Access to proximity admin commands + default: op \ No newline at end of file diff --git a/paper/build.gradle.kts b/paper/build.gradle.kts new file mode 100644 index 0000000..7fb489f --- /dev/null +++ b/paper/build.gradle.kts @@ -0,0 +1,26 @@ +plugins { + id("com.gradleup.shadow") + id("xyz.jpenilla.run-paper") +} + +version = "1.0.0" + +dependencies { + compileOnly("io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT") + implementation(project(":commun")) + implementation(project(":bukkit")) +} +tasks.shadowJar { + archiveBaseName.set("LagoonPlugin") + archiveClassifier.set("") + archiveVersion.set(version.toString()) +} + +tasks.build { + dependsOn(tasks.shadowJar) +} + +tasks.runServer { + minecraftVersion("1.21.11") + runDirectory.set(file("run")) +} diff --git a/paper/src/main/java/fr/redsavant/LagoonPlugin.java b/paper/src/main/java/fr/redsavant/LagoonPlugin.java new file mode 100644 index 0000000..a378629 --- /dev/null +++ b/paper/src/main/java/fr/redsavant/LagoonPlugin.java @@ -0,0 +1,53 @@ +package fr.redsavant; + +import fr.redsavant.commands.MuteCommand; +import fr.redsavant.proximity.PlayerCodeManager; +import fr.redsavant.proximity.ProximityListener; +import fr.redsavant.proximity.ProximityTask; +import fr.redsavant.ws.WebSocketClient; +import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents; + +import java.net.URI; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +public class LagoonPlugin extends BootstrapPlugin { + + private WebSocketClient wsClient; + private ProximityTask proximityTask; + + @Override + protected void onStart() { + saveDefaultConfig(); + + String roomCode = getConfig().getString("room-code", "CHANGE_ME"); + URI wsUri = URI.create("wss://lagoon.under-scape.com/ws/rooms/" + roomCode + "/plugins/proximity"); + + PlayerCodeManager codeManager = new PlayerCodeManager(); + Set mutedPlayers = new HashSet<>(); + wsClient = new WebSocketClient(wsUri, msg -> { + // future reponse de drewen + }); + wsClient.connect(); + + getServer().getPluginManager().registerEvents(new ProximityListener(codeManager), this); + + + MuteCommand muteCommand = new MuteCommand(mutedPlayers); + getLifecycleManager().registerEventHandler(LifecycleEvents.COMMANDS, event -> { + event.registrar().register(muteCommand.build().build(), "Proximity commands"); + }); + + proximityTask = new ProximityTask(wsClient, codeManager, mutedPlayers); + proximityTask.runTaskTimerAsynchronously(this, 20L, 60L); + + getLogger().info("LagoonPlugin enabled — room: " + roomCode); + } + + @Override + protected void onStop() { + if (proximityTask != null) proximityTask.cancel(); + if (wsClient != null) wsClient.close(); + } +} diff --git a/paper/src/main/java/fr/redsavant/commands/MuteCommand.java b/paper/src/main/java/fr/redsavant/commands/MuteCommand.java new file mode 100644 index 0000000..f7d4b94 --- /dev/null +++ b/paper/src/main/java/fr/redsavant/commands/MuteCommand.java @@ -0,0 +1,53 @@ +package fr.redsavant.commands; + +import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.context.CommandContext; +import io.papermc.paper.command.brigadier.CommandSourceStack; +import io.papermc.paper.command.brigadier.Commands; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.Set; +import java.util.UUID; + +public class MuteCommand { + + private final Set mutedPlayers; + + public MuteCommand(Set mutedPlayers) { + this.mutedPlayers = mutedPlayers; + } + + public com.mojang.brigadier.builder.LiteralArgumentBuilder build() { + return Commands.literal("proximity") + .requires(ctx -> ctx.getSender().hasPermission("lagoon.admin")) + .then( + Commands.literal("mute") + .then( + Commands.argument("player", StringArgumentType.word()) + .executes(this::executeMute) + ) + ); + } + + private int executeMute(CommandContext ctx) { + var sender = ctx.getSource().getSender(); + String playerName = StringArgumentType.getString(ctx, "player"); + + Player target = Bukkit.getPlayerExact(playerName); + if (target == null) { + sender.sendMessage("§cUnknown player"); + return 0; + } + + UUID uuid = target.getUniqueId(); + if (mutedPlayers.contains(uuid)) { + mutedPlayers.remove(uuid); + sender.sendMessage("§a" + target.getName() + " has been unmuted on Lagoon"); + } else { + mutedPlayers.add(uuid); + sender.sendMessage("§e" + target.getName() + " has been muted on Lagoon"); + } + return 1; + } +} \ No newline at end of file diff --git a/paper/src/main/resources/paper-plugin.yml b/paper/src/main/resources/paper-plugin.yml new file mode 100644 index 0000000..bc26091 --- /dev/null +++ b/paper/src/main/resources/paper-plugin.yml @@ -0,0 +1,20 @@ +name: LagoonPlugin +version: 1.0.0 +description: A plugin to link proximity chat of Lagoon +website: https://lagoon.under-scape.com +authors: + - RedSavant + - UnderScape (lagoon) +api-version: '1.21' +main: fr.redsavant.LagoonPlugin + +commands: + proximity: + description: Base command + usage: /proximity mute + permission: lagoon.admin + +permissions: + lagoon.admin: + description: Access to proximity admin commands + default: op \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index aadc370..265a657 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1,3 @@ rootProject.name = "Lagoon" -include("commun", "bukkit") \ No newline at end of file +include("commun", "bukkit", "paper") \ No newline at end of file