• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

[Bug/Error] Report-Nachricht wird mehrmals gesendet

AvoPXL

Minecrafter
Registriert
14 Mai 2016
Beiträge
28
Alter
29
Diamanten
0
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:
package me.alphaavo.hemdreport;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ClickEvent.Action;
import net.md_5.bungee.api.chat.TextComponent;

public class HemdReport extends JavaPlugin {

    @Override
    public void onEnable() {

    }

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        Player p = (Player) sender;
        if (cmd.getName().equalsIgnoreCase("report")) {
            if (args.length < 2) {
                p.sendMessage("§7[§4HemdReport§7] §c/report <Name> <Grund>");
                return true;
            }
            Player t = Bukkit.getServer().getPlayer(args[0]);
            String reason = "";
            for (int i = 1; i < args.length; i++) {
                reason += args[i] + " ";
            }
            if (t == null) {
                p.sendMessage("§7[§4HemdReport§7] §cDieser Spieler ist nicht online!");
                return true;
            } else {
                for (Player all : Bukkit.getServer().getOnlinePlayers()) {
                    if (all.hasPermission("hemdreport.getreports")) {
                        report(p, t, all, reason);
                    }
                }
                return true;
            }
        }
        if (cmd.getName().equalsIgnoreCase("completereport")) {
            if (p.hasPermission("hemdreport.getreports")) {
                if (args.length != 1) {
                    p.sendMessage("§c/completereport <Name>");
                    return true;
                }
                Player t = Bukkit.getServer().getPlayer(args[0]);
                if (t == null) {
                    p.sendMessage("§cDieser Spieler ist nicht (mehr) online!");
                    return true;
                } else {
                    getServer().dispatchCommand(getServer().getConsoleSender(), "gamemode 3 " + p.getName());
                    getServer().dispatchCommand(getServer().getConsoleSender(),
                            "tp " + p.getName() + " " + t.getName());
                    return true;
                }
            }
        }
        return true;
    }

    public void report(Player p, Player t, Player all, String reason) {
        Bukkit.getServer().broadcastMessage("§6§m-------§c HemdMann §6§m-------");
        Bukkit.getServer().broadcastMessage("§2Spieler: §c" + t.getName());
        Bukkit.getServer().broadcastMessage("§2Reporter: §a" + p.getName());
        Bukkit.getServer().broadcastMessage("§4Grund: §c" + reason);
        TextComponent click = new TextComponent(" §4§lKlicke hier ");
        click.setClickEvent(new ClickEvent(Action.RUN_COMMAND, "/completereport " + t.getName()));
        TextComponent msg = new TextComponent("§c-->");
        TextComponent msg2 = new TextComponent("§c<--");
        msg.addExtra(click);
        msg.addExtra(msg2);
        all.spigot().sendMessage(msg);
        Bukkit.getServer().broadcastMessage("§6§m-------§c HemdMann §6§m-------");
    }

}

Danke für jegliche Hilfe.

Grüße
 
S

Shio

Guest
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
 

AvoPXL

Minecrafter
Registriert
14 Mai 2016
Beiträge
28
Alter
29
Diamanten
0
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

Vielen Dank.

Klappt perfekt :) Großen Dank!
 
Oben