• 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
708
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
174
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
174
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
174
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
174
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

Miner
Osterei Experte
Mitglied seit
30 Juni 2017
Beiträge
181
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
  • iTz_Proph3t iTz_Proph3t:
    Aber ich will heut Cabrio fahren :(
  • SirYwell SirYwell:
    Ja werden zum Glück nur 29 Grad hier heute
  • Hadde-chan Hadde-chan:
    wird noch heißt genug heute
  • HardSoul HardSoul:
    Bei uns kamen gerade 2 Hobbits rein und warfen einen Ring auf uns...
  • Stern☆ Stern☆:
    Cool, bei mir auch
  • Stern☆ Stern☆:
    25 .. das schon kühl ^^
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    Manchmal geh ich für ein paar Minuten raus weils zu kalt ist.
  • Hadde-chan Hadde-chan:
    Alles über 23 ist zu viel
  • Hadde-chan Hadde-chan:
    außer bei mecces. da steigt meine toleranz bis 45 grad. leider reicht selbst das nicht immer aus ._.
  • Stern☆ Stern☆:
    Dachte ihr habt Klima?
  • Stern☆ Stern☆:
    Ich hab bei mir im Garten heuer Melone angebaut und die wächst gut :D Wenn es so warm bleibt dann hab ich heuer Melonen ^^
  • Hadde-chan Hadde-chan:
    ne klimaanlage kommt aber nich gegen zwei große fritteusen an, diverse wärmelampen und nen großen grill xd
  • Hadde-chan Hadde-chan:
    achso und unsere toaster und diverse warmhaltegeräte und beheizte tische
  • Hadde-chan Hadde-chan:
    einfach alles strahlt wärme ab xD Dazu noch die kühlgeräte die ja auch wärme abstrahlen
  • Stern☆ Stern☆:
    Das ist böse ... bei uns gibt es da stellenweise auch aber da muss ich nicht arbeiten XD
  • Stern☆ Stern☆:
    ...nur manchmal hin wenn was kaputt ist ... das ist dann echt doof ^^
  • Stern☆ Stern☆:
    Bei dir klingt das wie die Dauerhölle ..
  • HardSoul HardSoul:
    Da bekommt man echt Mitleid :oops:
  • Hadde-chan Hadde-chan:
    es ist auch warm und du musst permanent trinken xD wer nicht trinkt verliert
  • iTz_Proph3t iTz_Proph3t:
    ich hab da kein mitleid mit
  • iTz_Proph3t iTz_Proph3t:
    so schlecht wie die burger von hadde immer sind ...
  • iTz_Proph3t iTz_Proph3t:
    It´s coming <3
  • Stern☆ Stern☆:
    Oha :D
    Stern☆ Stern☆: Oha :D
    Oben