Pop de Msg + MP

Sala

Aventurier
27 Février 2021
23
0
3
18
Bonjour,
J'essaie de faire un plugin de Pop de message aléatoire toutes les 3-5 minutes ainsi que des MP avec la commande /msg (pour que ce soit plus jolie que le /tell).
J'ai juste un problème avec le /msg <pseudo> <args>, c'est que quand on mp quelqu'un, l'argument 0 est pris en compte dans les arguments...
Merci de votre aide !

Voici mon code : (ne prenez pas en compte, y'a le nom de mon serveur dans le code...)
Pop de MSG :
1617951616872.png


MP :
1617951537775.png
 
Bonjour,

Ton problème est plutôt simple, tu inclus le premier argument args[0] qui correspond au nom du joueur dans ton message.
Java:
// args[0] est inclus
for(String part : args) {
    bc.append(part + ' ');
}

// args[0] est exclus (vu qu'on commence à args[1])
for(int i = 1; i < args.length; ++i) {
    bc.append(args[i] + ' ');
}

Et sinon, j'ai un peu réécrit ton code, si tu veux voir un autre style d'écriture.
Java:
public class MyPlugin extends JavaPlugin {
    private final Random random = new Random();
    
    @Override
    public void onEnable() {
        // todo: rajouter
        //  aliases: [tell]
        //  dans le plugin.yml
        this.getCommand("msg").setExecutor(new MsgCommand());
        
        // mieux vaut dire à Bukkit de répéter notre tâche tous les x temps
        // que de faire ça nous-même
        //
        // le premier nombre correspond au délai initial pour le premier appel,
        // le second au délai entre deux appels
        //
        // les durées sont en ticks (vingtièmes de seconde), donc 3600 ticks = 180 secondes = 3 minutes
        //
        // https://hub.spigotmc.org/javadocs/spigot/org/bukkit/scheduler/BukkitScheduler.html#scheduleSyncRepeatingTask(org.bukkit.plugin.Plugin,java.lang.Runnable,long,long)
        Bukkit.getScheduler().scheduleSyncRepeatingTask(this, this::taskRandomMessage, 3600L, 3600L);
    }
    
    private void taskRandomMessage() {
        // génère un entier naturel dans [0; 101[
        // (0 inclus, 101 exclus, donc entre 0 et 100 inclus)
        int rand = random.nextInt(101);
        
        // au lieu de vérifier si a <= rand <= b,
        // on force simplement le si à ne pas avoir d'autre cas
        
        // 31% de chance
        if(rand >= 70) {
            Bukkit.broadcastMessage("rand >= 70 (" + rand + ')');
        }
        // 34% de chance
        else if(rand >= 36) {
            // rand < 70 (sinon on serait rentré dans le premier `if`)
            Bukkit.broadcastMessage("35 < rand < 70 (" + rand + ')');
        }
        // 35% de chance
        else {
            // rand < 36 (sinon on serait rentré dans le second `if`)
            Bukkit.broadcastMessage("rand <= 35 (" + rand + ')');
        }
    }
}
Java:
public class MsgCommand implements CommandExecutor {
    @Override
    // le site bloque les fonctions onX, donc la fonction est à renommer
    public boolean on_command(CommandSender sender, Command command, String label, String[] args) {
        // pas besoin de vérifier que `sender instanceof Player`,
        // parce que tout le monde (même la console) peut /msg
        
        if(args.length < 2) {
            // au lieu de regarder le nom de la commande,
            // on prend le 3e paramètre `label` qui correspond
            // au nom (ou l'alias) utilisé
            
            sender.sendMessage("§b§lLUNA§5SIA §e§m|§r §c/" + label + " <pseudo> <msg>");
            return true; // renvoyer false afficherait l'aide par défaut
        }
        
        String username = args[0];
        Player recipient = Bukkit.getPlayerExact(username);
        
        if(recipient == null) {
            sender.sendMessage("§b§lLUNA§5SIA §e§m|§r §cJoueur introuvable: " + username);
            return true;
        }
        
        // ignore le premier argument (pseudo), et réunis tous les arguments avec un espace " "
        String message = Arrays.stream(args).skip(1).collect(Collectors.joining(" "));
        
        recipient.sendMessage("§7[§dMessage Privé§7] §eDe §b" + recipient.getDisplayName() + "§r§c: §6" + message);
        sender.sendMessage("§7[§dMessage Privé§7] §eÀ §b" + recipient.getDisplayName() + "§r§c: §6" + message);
        
        return true;
    }
}

Cordialement,
ShE3py