• 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!

Report Plugin

HundiZockt

Minecrafter
Mitglied seit
5 März 2019
Beiträge
6
Hey ich wollte ein eigenes report Plugin schreiben doch jedes mal wenn ich /report eigebe kommt ein internal Error hoffe ihr könnt mir helfen...Bild1.pngBild2.pngBild3.pngBild4.png
 

Malfrador

Workaholic
Osterei Experte
Mitglied seit
16 Juni 2013
Beiträge
742
Minecraft
Malfrador
Bukkit.GetPlayer (Zeile 15) erwartet die Eingabe einer UUID oder eines Namens, es darf nicht 0/null sein. Da du keinen Spieler angegeben hast, sondern nur /report, entsteht dieser Fehler.
Eventuell kannst du es beheben in dem du target erst später setzt (nachdem du festgestellt hast, das ein Spieler angegeben wurde).

Das lässt sich auch aus der Fehlermeldung gut herauslesen:
Caused by: java.lang.IndexOutOfBoundsException:0
// (Fehler)
at .... (ReportCommand.java:15)
// (.Java-Datei:Zeile)
 

HundiZockt

Minecrafter
Mitglied seit
5 März 2019
Beiträge
6
Bukkit.GetPlayer (Zeile 15) erwartet die Eingabe einer UUID oder eines Namens, es darf nicht 0/null sein. Da du keinen Spieler angegeben hast, sondern nur /report, entsteht dieser Fehler.
Eventuell kannst du es beheben in dem du target erst später setzt (nachdem du festgestellt hast, das ein Spieler angegeben wurde).

Das lässt sich auch aus der Fehlermeldung gut herauslesen:
Caused by: java.lang.IndexOutOfBoundsException:0
// (Fehler)
at .... (ReportCommand.java:15)
// (.Java-Datei:Zeile)
Danke für deine Hilfe aber ich hab es jetzt mal nach der Perm abfrage für notify gemacht funkt leider immer noch nicht...
 

BloodSKreaper

Miner
Osterei Experte
Mitglied seit
12 Oktober 2014
Beiträge
185
Minecraft
BloodSKreaper
Guten Tag,

wie sieht dein Code denn jetzt aus? Einfach kurz als Code hier einfügen, dann erkennt man das Ganze auch besser als auf einem Bild. Kommt immernoch die gleiche Fehlermeldung? Das Problem ist ja nicht, dass du bei Bukkit.getPlayer(String name) null übergibst, sondern dass das Command-Agument args[0] garnicht existiert. Das heißt, dass du zuerst abfragen musst, ob args übergeben wurden und dann damit arbeitest.

Freundliche Grüße
BloodSKreaper
 

HundiZockt

Minecrafter
Mitglied seit
5 März 2019
Beiträge
6
Guten Tag,

wie sieht dein Code denn jetzt aus? Einfach kurz als Code hier einfügen, dann erkennt man das Ganze auch besser als auf einem Bild. Kommt immernoch die gleiche Fehlermeldung? Das Problem ist ja nicht, dass du bei Bukkit.getPlayer(String name) null übergibst, sondern dass das Command-Agument args[0] garnicht existiert. Das heißt, dass du zuerst abfragen musst, ob args übergeben wurden und dann damit arbeitest.

Freundliche Grüße
BloodSKreaper
Hey hier ist mal der Code... hoffe es du kannst es damit besser sehen.


Code:
package de.hundizockt.report.commands;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class ReportCommand implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if(sender instanceof Player) {
            Player p = (Player) sender;
            Player notify = (Player) Bukkit.getOnlinePlayers();
            if(args.length == 1) {
                p.sendMessage("§2§lDu hast erfolgreich den Spieler §6" + args[0] + " §2§lreportet!");
                if(notify.hasPermission("report.notify")) {
                    Player target = Bukkit.getPlayer(args[0]);
                    notify.sendMessage("§8===========================");
                    notify.sendMessage("§8Reporter: §6" + p.getName());
                    notify.sendMessage("§8Reportet: §6" + args[0]);
                    notify.sendMessage("§8===========================");
                }
            } else {
                p.sendMessage("§7Bitte benutze §6/report <Spieler>§7!");
            }
            
        }
        return false;
    }

}
 

BloodSKreaper

Miner
Osterei Experte
Mitglied seit
12 Oktober 2014
Beiträge
185
Minecraft
BloodSKreaper
Guten Tag,

wo genau kommt deine Fehlermeldung? Einfach nochmal die aktuelle hier rein kopieren bitte.
Was mir an deinem Code noch auffällt ist das hier:
Java:
            Player notify = (Player) Bukkit.getOnlinePlayers();
Das kannst du so nicht machen. Du castest hier einfach eine Collection (siehe JavaDocs) zu einem Player, was offensichtlich nicht dasselbe ist. Du musst Bukkit.getOnlinePlayers() als Collection behandeln. Das heißt, dass du durch die Collection iterierst und für jeden Eintrag deine gewünschte Abfrage durchführen musst.
Wenn du willst kann ich dir den Code schnell als Beispiel schreiben.

Freundliche Grüße
BloodSKreaper
 
Zuletzt bearbeitet:

HundiZockt

Minecrafter
Mitglied seit
5 März 2019
Beiträge
6
Guten Tag,

wo genau kommt deine Fehlermeldung? Einfach nochmal die aktuelle hier rein kopieren bitte.
Was mir an deinem Code noch auffällt ist das hier:
Java:
            Player notify = (Player) Bukkit.getOnlinePlayers();
Das kannst du so nicht machen. Du castest hier einfach eine Collection (siehe JavaDocs) zu einem Player, was offensichtlich nicht dasselbe ist. Du musst Bukkit.getOnlinePlayers() als Collection behandeln. Das heißt, dass du durch die Collection iterierst und für jeden Eintrag deine gewünschte Abfrage durchführen musst.
Wenn du willst kann ich dir den Code schnell als Beispiel schreiben.

Freundliche Grüße
BloodSKreaper
Ja ein beispiel wäre sehr nett... ich programmiere noch nicht so lange
 

BloodSKreaper

Miner
Osterei Experte
Mitglied seit
12 Oktober 2014
Beiträge
185
Minecraft
BloodSKreaper
Java:
package de.hundizockt.report.commands;




import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class ReportCommand implements CommandExecutor {

  @Override
  public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (!(sender instanceof Player))
      return false; // Return false if command sender is no Player
    Player p = (Player) sender;
    if (args.length != 1) { // Return false if not exactly 1 argument is given
      p.sendMessage("§7Bitte benutze §6/report <Spieler>§7!");
      return false;
    }
    /*
     * Wenn nur Spieler reportet werden sollen, die zum Zeitpunkt des Reports online sind, dann so
     * wie unten
     */
    // Player target = Bukkit.getPlayer(args[0]);
    // if(target == null) { //Prüft, ob der Spieler mit dem gegebenen Namen existiert und online
    // ist. Wenn nicht, dann "return false"
    // p.sendMessage("Der Spieler "+args[0]+" existiert nicht!");
    // return false;
    // }

    /*
     * Wenn auch Spieler reported werden sollen, die möglicherweise offline sind, dann so wie unten:
     * BEACHTE: Hiermit können auch Spieler reported werden, die noch nie online waren, oder
     * garnicht existieren.
     */
    OfflinePlayer target = Bukkit.getOfflinePlayer(args[0]);//


    for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
      if (onlinePlayer.hasPermission("report.notify")) {
        onlinePlayer.sendMessage("§8===========================");
        onlinePlayer.sendMessage("§8Reporter: §6" + p.getName());
        onlinePlayer.sendMessage("§8Reportet: §6" + target.getName());
        onlinePlayer.sendMessage("§8===========================");
      }
    }
    p.sendMessage("§2§lDu hast erfolgreich den Spieler §6" + args[0] + " §2§lreportet!");
    return true;
  }
}
Wenn du willst, dass nur Spieler reported werden können, die zum Zeitpunkt des Reports online sind, dann einfach bei den entsprechenden Linien die Schrägstriche entfernen und
Code:
    OfflinePlayer target = Bukkit.getOfflinePlayer(args[0]);
löschen.
Solltest du Fragen haben, so zögere nicht diese zu stellen ;)

Freundliche Grüße
BloodSKreaper
 
Zuletzt bearbeitet:

HundiZockt

Minecrafter
Mitglied seit
5 März 2019
Beiträge
6
Java:
package me.bloodskreaper.chat;

import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class ReportCommand implements CommandExecutor {

  @Override
  public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (!(sender instanceof Player))
      return false; // Return false if command sender is no Player
    Player p = (Player) sender;
    if (args.length != 1) { // Return false if not exactly 1 argument is given
      p.sendMessage("§7Bitte benutze §6/report <Spieler>§7!");
      return false;
    }
    /*
     * Wenn nur Spieler reportet werden sollen, die zum Zeitpunkt des Reports online sind, dann so
     * wie unten
     */
    // Player target = Bukkit.getPlayer(args[0]);
    // if(target == null) { //Prüft, ob der Spieler mit dem gegebenen Namen existiert und online
    // ist. Wenn nicht, dann "return false"
    // p.sendMessage("Der Spieler "+args[0]+" existiert nicht!");
    // return false;
    // }

    /*
     * Wenn auch Spieler reported werden sollen, die möglicherweise offline sind, dann so wie unten:
     * BEACHTE: Hiermit können auch Spieler reported werden, die noch nie online waren, oder
     * garnicht existieren.
     */
    OfflinePlayer target = Bukkit.getOfflinePlayer(args[0]);//


    for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
      if (onlinePlayer.hasPermission("report.notify")) {
        onlinePlayer.sendMessage("§8===========================");
        onlinePlayer.sendMessage("§8Reporter: §6" + p.getName());
        onlinePlayer.sendMessage("§8Reportet: §6" + target.getName());
        onlinePlayer.sendMessage("§8===========================");
      }
    }
    p.sendMessage("§2§lDu hast erfolgreich den Spieler §6" + args[0] + " §2§lreportet!");
    return true;
  }
}
Wenn du willst, dass nur Spieler reported werden können, die zum Zeitpunkt des Reports online sind, dann einfach bei den entsprechenden Linien die Schrägstriche entfernen und
Code:
    OfflinePlayer target = Bukkit.getOfflinePlayer(args[0]);
löschen.
Solltest du Fragen haben, so zögere nicht diese zu stellen ;)

Freundliche Grüße
BloodSKreaper
Danke dafür werde es morgen sofort ausprobieren
 

HundiZockt

Minecrafter
Mitglied seit
5 März 2019
Beiträge
6
Java:
package de.hundizockt.report.commands;




import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class ReportCommand implements CommandExecutor {

  @Override
  public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (!(sender instanceof Player))
      return false; // Return false if command sender is no Player
    Player p = (Player) sender;
    if (args.length != 1) { // Return false if not exactly 1 argument is given
      p.sendMessage("§7Bitte benutze §6/report <Spieler>§7!");
      return false;
    }
    /*
     * Wenn nur Spieler reportet werden sollen, die zum Zeitpunkt des Reports online sind, dann so
     * wie unten
     */
    // Player target = Bukkit.getPlayer(args[0]);
    // if(target == null) { //Prüft, ob der Spieler mit dem gegebenen Namen existiert und online
    // ist. Wenn nicht, dann "return false"
    // p.sendMessage("Der Spieler "+args[0]+" existiert nicht!");
    // return false;
    // }

    /*
     * Wenn auch Spieler reported werden sollen, die möglicherweise offline sind, dann so wie unten:
     * BEACHTE: Hiermit können auch Spieler reported werden, die noch nie online waren, oder
     * garnicht existieren.
     */
    OfflinePlayer target = Bukkit.getOfflinePlayer(args[0]);//


    for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
      if (onlinePlayer.hasPermission("report.notify")) {
        onlinePlayer.sendMessage("§8===========================");
        onlinePlayer.sendMessage("§8Reporter: §6" + p.getName());
        onlinePlayer.sendMessage("§8Reportet: §6" + target.getName());
        onlinePlayer.sendMessage("§8===========================");
      }
    }
    p.sendMessage("§2§lDu hast erfolgreich den Spieler §6" + args[0] + " §2§lreportet!");
    return true;
  }
}
Wenn du willst, dass nur Spieler reported werden können, die zum Zeitpunkt des Reports online sind, dann einfach bei den entsprechenden Linien die Schrägstriche entfernen und
Code:
    OfflinePlayer target = Bukkit.getOfflinePlayer(args[0]);
löschen.
Solltest du Fragen haben, so zögere nicht diese zu stellen ;)

Freundliche Grüße
BloodSKreaper
Hey BloodSKreaper wie kann ich den machen das man noch einen Grund hinzufügt?
Hoffe du kannst mir helfen...

LG HundiZockt
 

BloodSKreaper

Miner
Osterei Experte
Mitglied seit
12 Oktober 2014
Beiträge
185
Minecraft
BloodSKreaper
Wenn du willst, dass der Kommentar wie folgt aussehen soll, dann musst du lediglich überprüfen, ob mehr als 1 Argument übergeben wurde und die Argumente dann zu einem String verketten.
Code:
/report <SPIELERNAME> <GRUND MIT LEERZEICHEN>
Java:
package me.bloodskreaper.chat;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class ReportCommand implements CommandExecutor {

  @Override
  public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (!(sender instanceof Player))
      return false; // Return false if command executor is no Player
    Player p = (Player) sender;
    if (args.length < 2) { // Return false if fewer than 2 arguments are given
      p.sendMessage("§7Bitte benutze §6/report <Spieler> <Grund>§7!");
      return false;
    }
    /*
     * Wenn nur Spieler reportet werden sollen, die zum Zeitpunkt des Reports online sind, dann so
     * wie unten
     */
    Player target = Bukkit.getPlayer(args[0]);
    if (target == null) { // Prüft, ob der Spieler mit dem gegebenen Namen existiert und online ist.
                          // Wenn nicht, dann "return false"
      p.sendMessage("Der Spieler " + args[0] + " ist nicht online!");
      return false;
    }

   /*Code von SirYwell übernommen*/
   String reason = args[1];
   for (int i = 2; i < args.length; i++) {
     reason += " " + args[i];
   }


    for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
      if (onlinePlayer.hasPermission("report.notify")) {
        onlinePlayer.sendMessage("§8===========================");
        onlinePlayer.sendMessage("§8Reporter: §6" + p.getName());
        onlinePlayer.sendMessage("§8Reportet: §6" + target.getName());
        onlinePlayer.sendMessage("§8Grund: §6" + reason);
        onlinePlayer.sendMessage("§8===========================");
      }
    }
    p.sendMessage("§2§lDu hast erfolgreich den Spieler §6" + args[0] + " §2§lfür '$6"+reason+"§2§l' reportet!");
    return true;
  }
}
Der Code wurde nicht getestet.
 
Zuletzt bearbeitet:

SirYwell

Vorarbeiter
Osterei Experte
Mitglied seit
30 Juni 2017
Beiträge
214
Alter
20
Minecraft
SirYwell
Java:
String reason = "";
for (int i = 1; i < args.length; i++) {
    reason = reason + " " + args[i];
}
reason.trim(); //Das Leerzeichen am Satzanfang entfernen
Diese Stelle kann man noch ein wenig optimieren. Wir wissen ja bereits, dass mindestens ein Wort in dem Array enthalten ist, das unseren Grund darstellt. Also können wir auch sagen:

Java:
String reason = args[1];
for (int i = 2; i < args.length; i++) {
    reason += " " + args[i];
}
Dadurch ersparen wir uns das Entfernen eines ersten Leerzeichens (Übrigens müsste dort ansonsten reason = reason.trim() stehen).

Theoretisch könnte man zusätzlich noch auf einen StringBuilder zurückgreifen, das macht aber bei Arrays mit geringer Größe keinen wirklichen Unterschied.
 
Allgemein
Hilfe Benutzer
  • HardSoul HardSoul:
    Das Tauziehen ist nach knapp 6 Jahren beendet xD
  • G Ganjabaumann:
    wie alt seid ihr eig alle so im schnitt ?
  • G Ganjabaumann:
    auf jeden fall schüchtern ansche
    inend xD
  • G Ganjabaumann:
    hilgsbereitschafft wirdhier wohl auch wahrgenommen .
    ....
  • G Ganjabaumann:
    *hilfsbereitschafft
  • SirYwell SirYwell:
    Ich bin durchschnittlich 12 Jahre alt
  • G Ganjabaumann:
    oh is kein ding, hat mich nur intressiert :)
  • G Ganjabaumann:
    ich bin 35 btw ....nunja un möchte ghalt nen server für paar freunde machen um etwas zu basteln als, nich mehr und nich weniger einfach ^^
  • G Ganjabaumann:
    ist einfach mehr arbeit als ich dachte iwie
  • G Ganjabaumann:
    zocken hier alles noch aktib minecraft oder einfach nur online im forum ?
  • G Ganjabaumann:
    *alle noch aktiv
  • HardSoul HardSoul:
    Ich bin noch aktiv, da ich auch nen Server aufbaue :) das wird sich allerdings noch eine Weile ziehen
  • G Ganjabaumann:
    warum denn...wegen der confi geschichte oder grundlegend ideen wie er sein soll ?
  • HardSoul HardSoul:
    Eher auf Grund der Größe :) Wir sind nur ein kleines 3 Mann-Team. Das ist auch der Grund warum es keine Deadlines gibt ^^
  • G Ganjabaumann:
    oh okay
  • G Ganjabaumann:
    bissi mehr schreiben würde euch nich schaden denke ich xD
  • G Ganjabaumann:
    klappt das wieder mit dem server online stellen inz
    wischen
  • G Ganjabaumann:
    nur zur info, für meine freundin und mich is das echt etwas belastend wenn niemand antwortet ;)
  • maybeto maybeto:
    nur zur Info, das hier ist der Chat, für technische Fragen solltest du wohl besser die Bugreport und Supportstelle nutzen. Einfach mal das Forum durchlesen und kennen lernen würde schon helfen.....
  • G Ganjabaumann:
    okay danke, werde ich machen nur finde ich ers im chat was hilfe betrifft relativ karg einfach
  • G Ganjabaumann:
    aber werd es so machen wie du sagtest
  • G Ganjabaumann:
    und ich sehe nix schlimmes was ich geschrieben habe, außer etwas zu fragen an die allgemeinheirt ......
  • G Ganjabaumann:
    *allgemeinheit
  • G Ganjabaumann:
    ich verstehe halt nich so ganz warum niemand antwortet o
    der hilft
  • maybeto maybeto:
    weil die wenigsten den Chat für sowas nutzen. Wenn du zu iwas Hilfe brauchst, eröffne ein Thema im entsprechenden Bereich und mit etwas Geduld wird einem dort in der Regel relativ schnell geholfen
    maybeto maybeto: weil die wenigsten den Chat für sowas nutzen. Wenn du zu iwas Hilfe brauchst, eröffne ein Thema...
    Oben