pala M-msg: /msg /r messages prives (wiki commandes)

This commit is contained in:
Anaïs Saraiva
2026-10-19 02:49:17 +02:00
parent ba78a3b1e2
commit 9efa6c5548
3 changed files with 55 additions and 0 deletions
+3
View File
@@ -538,6 +538,9 @@ avant M4 (TODO:crafts-machines).
wiki + invisibilite 15 s wiki via MobEffectInstance, APIs verifiees javap) + /tpdeny. wiki + invisibilite 15 s wiki via MobEffectInstance, APIs verifiees javap) + /tpdeny.
Bug corrige avant build : tp vers la cible (TpaTask), pas vers soi-meme. VERIFIE : build Bug corrige avant build : tp vers la cible (TpaTask), pas vers soi-meme. VERIFIE : build
SUCCESSFUL, boot Done, 0 erreur. UNVERIFIED en jeu (2 joueurs requis). SUCCESSFUL, boot Done, 0 erreur. UNVERIFIED en jeu (2 joueurs requis).
- M-msg LIVRE 2026-10-19 ~02:55 : /msg <joueur> <texte> + /r <texte> (wiki commandes, suivi
dernier expediteur par destinataire, double sens). VERIFIE : build SUCCESSFUL, boot Done,
0 erreur. UNVERIFIED en jeu (2 joueurs requis).
- Client/mod : boucle visuelle OPERATIONNELLE 2026-10-19 (Xvfb :99 + runClient SDL x11 + - Client/mod : boucle visuelle OPERATIONNELLE 2026-10-19 (Xvfb :99 + runClient SDL x11 +
captures Java Robot + pilotage xdotool + vision_analyze) : menu, Select World, monde New World captures Java Robot + pilotage xdotool + vision_analyze) : menu, Select World, monde New World
(creatif, cheats), /give, pose de bloc, inventaire, F3+T. Screens : scratch vis*.png. (creatif, cheats), /give, pose de bloc, inventaire, F3+T. Screens : scratch vis*.png.
@@ -38,6 +38,8 @@ public final class PalaCommands {
private static final java.util.Map<java.util.UUID, TpaRequest> TPA_REQUESTS = new java.util.HashMap<>(); private static final java.util.Map<java.util.UUID, TpaRequest> TPA_REQUESTS = new java.util.HashMap<>();
// TP differees vers un joueur (acceptees) : teleporte -> (cible, tick d'execution). // TP differees vers un joueur (acceptees) : teleporte -> (cible, tick d'execution).
private static final java.util.Map<java.util.UUID, TpaTask> TPA_QUEUE = new java.util.HashMap<>(); private static final java.util.Map<java.util.UUID, TpaTask> TPA_QUEUE = new java.util.HashMap<>();
// M-msg (wiki commandes) : dernier expediteur par destinataire (pour /r).
private static final java.util.Map<java.util.UUID, java.util.UUID> LAST_MSG = new java.util.HashMap<>();
private record TpaRequest(java.util.UUID from, long expireTick) { private record TpaRequest(java.util.UUID from, long expireTick) {
} }
@@ -96,6 +98,21 @@ public final class PalaCommands {
.executes(command -> tpRespond(command.getSource(), true))); .executes(command -> tpRespond(command.getSource(), true)));
dispatcher.register(Commands.literal("tpdeny") dispatcher.register(Commands.literal("tpdeny")
.executes(command -> tpRespond(command.getSource(), false))); .executes(command -> tpRespond(command.getSource(), false)));
dispatcher.register(Commands.literal("msg")
.then(Commands.argument("cible", EntityArgument.player())
.then(Commands.argument("texte",
com.mojang.brigadier.arguments.StringArgumentType
.greedyString())
.executes(command -> msg(command.getSource(),
EntityArgument.getPlayer(command, "cible"),
com.mojang.brigadier.arguments.StringArgumentType
.getString(command, "texte"))))));
dispatcher.register(Commands.literal("r")
.then(Commands.argument("texte",
com.mojang.brigadier.arguments.StringArgumentType.greedyString())
.executes(command -> reply(command.getSource(),
com.mojang.brigadier.arguments.StringArgumentType
.getString(command, "texte")))));
net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents.END_SERVER_TICK net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents.END_SERVER_TICK
.register(PalaCommands::tickSpawnQueue); .register(PalaCommands::tickSpawnQueue);
net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents.END_SERVER_TICK net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents.END_SERVER_TICK
@@ -279,6 +296,41 @@ public final class PalaCommands {
} }
} }
// /msg <cible> <texte> + /r <texte> : messages prives (wiki commandes). /r repond au
// dernier expediteur (suivi par destinataire).
private static int msg(CommandSourceStack source, ServerPlayer cible, String texte) {
try {
ServerPlayer player = source.getPlayerOrException();
sendPrivate(player, cible, texte);
return Command.SINGLE_SUCCESS;
} catch (com.mojang.brigadier.exceptions.CommandSyntaxException e) {
return 0;
}
}
private static int reply(CommandSourceStack source, String texte) {
try {
ServerPlayer player = source.getPlayerOrException();
java.util.UUID last = LAST_MSG.get(player.getUUID());
ServerPlayer cible = last == null ? null : source.getServer().getPlayerList().getPlayer(last);
if (cible == null) {
source.sendFailure(Component.literal("§cPersonne a qui repondre."));
return 0;
}
sendPrivate(player, cible, texte);
return Command.SINGLE_SUCCESS;
} catch (com.mojang.brigadier.exceptions.CommandSyntaxException e) {
return 0;
}
}
private static void sendPrivate(ServerPlayer from, ServerPlayer to, String texte) {
LAST_MSG.put(to.getUUID(), from.getUUID());
LAST_MSG.put(from.getUUID(), to.getUUID());
from.sendSystemMessage(Component.literal("§d[Moi -> " + to.getScoreboardName() + "] §f" + texte));
to.sendSystemMessage(Component.literal("§d[" + from.getScoreboardName() + " -> Moi] §f" + texte));
}
private static void tickSpawnQueue(MinecraftServer server) { private static void tickSpawnQueue(MinecraftServer server) {
if (SPAWN_QUEUE.isEmpty()) { if (SPAWN_QUEUE.isEmpty()) {
return; return;
Binary file not shown.