Paper handle !

This commit is contained in:
RedSavant
2026-03-25 19:09:09 +01:00
parent 940aa747f8
commit 1e7d845822
7 changed files with 169 additions and 2 deletions

10
.gitignore vendored
View File

@@ -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/

View File

@@ -11,4 +11,9 @@ commands:
proximity:
description: Base command
usage: /proximity mute <player>
permission: lagoon.admin
permission: lagoon.admin
permissions:
lagoon.admin:
description: Access to proximity admin commands
default: op

26
paper/build.gradle.kts Normal file
View File

@@ -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"))
}

View File

@@ -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<UUID> 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();
}
}

View File

@@ -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<UUID> mutedPlayers;
public MuteCommand(Set<UUID> mutedPlayers) {
this.mutedPlayers = mutedPlayers;
}
public com.mojang.brigadier.builder.LiteralArgumentBuilder<CommandSourceStack> 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<CommandSourceStack> 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;
}
}

View File

@@ -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 <player>
permission: lagoon.admin
permissions:
lagoon.admin:
description: Access to proximity admin commands
default: op

View File

@@ -1,3 +1,3 @@
rootProject.name = "Lagoon"
include("commun", "bukkit")
include("commun", "bukkit", "paper")