Gelöst ServerPlugin [Bug/Error] Report-Nachricht wird mehrmals gesendet

Dieses Thema im Forum "Programmierung" wurde erstellt von AvoPXL, 27. August 2016.

  1. AvoPXL
    Offline

    AvoPXL

    Registriert seit:
    14. Mai 2016
    Beiträge:
    28
    Heyho MCSEU-Community :)

    Ich wollte ein Report-Plugin für einen Server schreiben auf den man mit einen ClickEvent in GM3 gesetzt wird und zu den reporteten Spieler tp't wird.

    Nun ist der Bug dass die Report Nachricht mehrmals gesendet wird.
    Ich weis dass es an den "for(Player all : Bukkit.getServer().getOnlinePlayers()){..." liegt, nur weiss ich nicht wie ich das fixen kann.

    Code:
    Code (Text):
    1. package me.alphaavo.hemdreport;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.command.Command;
    5. import org.bukkit.command.CommandSender;
    6. import org.bukkit.entity.Player;
    7. import org.bukkit.plugin.java.JavaPlugin;
    8.  
    9. import net.md_5.bungee.api.chat.ClickEvent;
    10. import net.md_5.bungee.api.chat.ClickEvent.Action;
    11. import net.md_5.bungee.api.chat.TextComponent;
    12.  
    13. public class HemdReport extends JavaPlugin {
    14.  
    15.     @Override
    16.     public void onEnable() {
    17.  
    18.     }
    19.  
    20.     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    21.         Player p = (Player) sender;
    22.         if (cmd.getName().equalsIgnoreCase("report")) {
    23.             if (args.length < 2) {
    24.                 p.sendMessage("§7[§4HemdReport§7] §c/report <Name> <Grund>");
    25.                 return true;
    26.             }
    27.             Player t = Bukkit.getServer().getPlayer(args[0]);
    28.             String reason = "";
    29.             for (int i = 1; i < args.length; i++) {
    30.                 reason += args[i] + " ";
    31.             }
    32.             if (t == null) {
    33.                 p.sendMessage("§7[§4HemdReport§7] §cDieser Spieler ist nicht online!");
    34.                 return true;
    35.             } else {
    36.                 for (Player all : Bukkit.getServer().getOnlinePlayers()) {
    37.                     if (all.hasPermission("hemdreport.getreports")) {
    38.                         report(p, t, all, reason);
    39.                     }
    40.                 }
    41.                 return true;
    42.             }
    43.         }
    44.         if (cmd.getName().equalsIgnoreCase("completereport")) {
    45.             if (p.hasPermission("hemdreport.getreports")) {
    46.                 if (args.length != 1) {
    47.                     p.sendMessage("§c/completereport <Name>");
    48.                     return true;
    49.                 }
    50.                 Player t = Bukkit.getServer().getPlayer(args[0]);
    51.                 if (t == null) {
    52.                     p.sendMessage("§cDieser Spieler ist nicht (mehr) online!");
    53.                     return true;
    54.                 } else {
    55.                     getServer().dispatchCommand(getServer().getConsoleSender(), "gamemode 3 " + p.getName());
    56.                     getServer().dispatchCommand(getServer().getConsoleSender(),
    57.                             "tp " + p.getName() + " " + t.getName());
    58.                     return true;
    59.                 }
    60.             }
    61.         }
    62.         return true;
    63.     }
    64.  
    65.     public void report(Player p, Player t, Player all, String reason) {
    66.         Bukkit.getServer().broadcastMessage("§6§m-------§c HemdMann §6§m-------");
    67.         Bukkit.getServer().broadcastMessage("§2Spieler: §c" + t.getName());
    68.         Bukkit.getServer().broadcastMessage("§2Reporter: §a" + p.getName());
    69.         Bukkit.getServer().broadcastMessage("§4Grund: §c" + reason);
    70.         TextComponent click = new TextComponent(" §4§lKlicke hier ");
    71.         click.setClickEvent(new ClickEvent(Action.RUN_COMMAND, "/completereport " + t.getName()));
    72.         TextComponent msg = new TextComponent("§c-->");
    73.         TextComponent msg2 = new TextComponent("§c<--");
    74.         msg.addExtra(click);
    75.         msg.addExtra(msg2);
    76.         all.spigot().sendMessage(msg);
    77.         Bukkit.getServer().broadcastMessage("§6§m-------§c HemdMann §6§m-------");
    78.     }
    79.  
    80. }
    81.  
    Danke für jegliche Hilfe.

    Grüße
     
    #1
  2. Shio
    Offline

    Shio

    Registriert seit:
    6. Februar 2016
    Beiträge:
    13
    Ich würde sagen du solltest in deiner Methode anstatt Broadcast überall all.sendmessage () benutzen

    Und ganz nebenbei ist all kein guter Name für einen Spieler.
    Und zudem würde ich auch nicht durch alle Spieler die online sind iterieren
    Sondern direkt auslesen welche Spieler diese Berechtigung haben und dann schauen ob diese online sind. Falls ja werden die dann informiert
     
    #2
    AvoPXL gefällt das.
  3. AvoPXL
    Offline

    AvoPXL

    Registriert seit:
    14. Mai 2016
    Beiträge:
    28
    Vielen Dank.

    Klappt perfekt :) Großen Dank!
     
    #3