Jump to content

Benötige hilfe: Finde den Fehler im gecodeten Plugin nicht


Empfohlene Beiträge

Hallo, ich habe ein problem das wie folgt beschreiben wird

Könnt ihr bitte helfen, das Plugin macht nicht das was es soll wenn ich z.b. /baustart eingebe mit oder ohne op zeigt er im chat /baustart an und nicht das was es soll.

Core.Java/Main:

https://pastebin.com/fy7xpBdV

Bautp Java:

https://pastebin.com/bUMPSHs1

Baustart Java:;

https://pastebin.com/GGf2Ri0v

Baustop java:

https://pastebin.com/H9x78Qy5

Plugin yml /falls wichtig):

https://pastebin.com/V7rsLZCB

 

Das Plugin soll generell bei dem Command /baustart den Spieler auf eine arraylist speichern und den Spieler bau-/Bauchat permission geben und den auf die whitelist setzen. Bei /baustop soll es die Arraylist mit allen Spielernamen löschen und die permission entfernen. Bei /bautp soll es die Spieler der Arraylist zu dem absender Teleportieren.

das plugin ist noch nicht ganz fertig ich wollte noch hinzufügen das der bei baustart permission vergibt und bei baustop sie entfernt und das gleiche bei einer whitelist, aber das bekomme ich alleine hin.

ps: Bin neu hier auf dem Forum

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey,

ich habe mich mit deiner Klasse "Baustart" beschäftigt und einige (kleinere) Fehler im Code korrigiert.

Diese sieht nun wie folgt aus:

public class CommandBaustart implements CommandExecutor {
	
   public List<String> playerlist = new ArrayList<String>();

   public boolean onCommand(CommandSender cs, Command cmd, String label, String[] args) {

       if (cmd.getName().equalsIgnoreCase("baustart")) {
           if (cs instanceof Player) {
        	   Player p = (Player) cs;
        	   if (p.hasPermission("bau.baustart")) {
        		   if (args.length == 1) {
        			   Player pp = Bukkit.getPlayer(args[0]);
        			   if (pp != null) {
        				   if (!playerlist.contains(pp.getName())) {
        					   playerlist.add(pp.getName());
        					   pp.sendMessage(ChatColor.YELLOW + "Du wurdest ins Bauteam geholt!");
        				   }
        			   } else {
        				   p.sendMessage(ChatColor.DARK_RED + "Der Spieler" + args[0] + "ist nicht Online!");
        			   }
           } else {
               p.sendMessage(ChatColor.DARK_RED + "/Baustart [Spieler]");
           }
       } else {
    	   p.sendMessage("§a[§4§lAlphaLand§a] §4Du hast keine Rechte um in den Baumodus zu gelangen!");
       }
   } else {
	   cs.sendMessage("§a[§4§lAlphaLand§a] §4Diesen Befehl können nur Spieler ausführen!");
   	}

      }
	return false;
   }
}

Die Meldung "/baustart" beim Ausführen erhältst du, weil du bei "usage" in der PluginYML "/<command>" eingetragen hast. Kannst du weglassen, da du dem Spieler bei einer Eingabe von mehr als einem Argument eine entsprechende Nachricht zur Verwendung des Befehls zusendest.

Außerdem musst du die Permissions ebenfalls in der PluginYML eintragen, da diese sonst nicht erkannt werden können.

Sieht dann so aus: 

permissions:
  bau.baustart:
    description: Baustart
    default: op

Kommen wir nun kurz zu den Änderungen, die ich an deiner Klasse vorgenommen habe:

1.) Die Spieler sollten als "List" abgespeichert werden, dazu musst du jedoch zunächst eine neue Array-List mit "= new ArrayList<String<()" erstellen. Deine verwendete Methode funktioniert hierbei leider nicht.

2.) Zum Abspeichern solltest du den Spielername (pp.getName) oder die Spieleruuid (pp.getUniqueId().toString()) verwenden, mit "pp.getPlayer()" kann das Plugin nicht viel anfangen und es kommt zu Fehlern beim Abspeichern.

3.) Ein "return" benötigst du für deine Zwecke nur am Schluss, also einmal, da dies an den Stellen wo du es eingesetzt hast nicht unbedingt notwendig ist.

4.) "try-catch" kannst du in diesem Falle auslassen, es kam beim Testen nur zu Fehlern. Anstelle dessen kannst du ruhig die IF-Abfragen verwenden, das genügt.

 

Ich hoffe, dass ich dir hiermit weiterhelfen konnte und der von dir angesprochene Fehler nun behoben ist. Bei mir hat der Code nach der Veränderung ohne Probleme funktioniert.

Falls du noch weitere Fragen hast, kannst du dich gerne an mich wenden!

 

Mit freundlichen Grüßen
FireSpirit15

bearbeitet von FireSpirit15
!=Null-Check eingefügt
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe es jetzt so wie sie FireSpirit15, aber habe die arraylist in der Core.java klasse erstellt und die java sieht wie folgt aus;

----------------------------------------------------------------------------------------

package de.alpha_2206.bau;

import java.util.ArrayList;

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

import net.md_5.bungee.api.ChatColor;

public class CommandBaustart2 implements CommandExecutor {
    

       public boolean onCommand(CommandSender cs, Command cmd, String label, String[] args) {

           if (cmd.getName().equalsIgnoreCase("baustart")) {
               if (cs instanceof Player) {
                   Player p = (Player) cs;
                   if (p.hasPermission("bau.baustart")) {
                       if (args.length == 1) {
                           Player pp = Bukkit.getPlayer(args[0]);
                           if (pp != null) {
                               if (!de.alpha_2206.bau.Core.playerlist.contains(pp.getUniqueId())) {
                                   de.alpha_2206.bau.Core.playerlist.add(pp.getUniqueId().toString());
                                   pp.sendMessage(ChatColor.YELLOW + "Du wurdest ins Bauteam geholt!");
                               }
                           } else {
                               p.sendMessage(ChatColor.DARK_RED + "Der Spieler" + args[0] + "ist nicht Online!");
                           }
               } else {
                   p.sendMessage(ChatColor.DARK_RED + "/Baustart [Spieler]");
               }
           } else {
               p.sendMessage("§a[§4§lAlphaLand§a] §4Du hast keine Rechte um in den Baumodus zu gelangen!");
           }
       } else {
           cs.sendMessage("§a[§4§lAlphaLand§a] §4Diesen Befehl können nur Spieler ausführen!");
           }

          }
        return false;
       }
    }

-----------------------------------------------------------------------

und beim versuch diesen auszuführen hat er nichts gemacht... in der Konsole wurde nur angezeigt, dass der spieler diesen befehl ausgeführt hat, aber nicht mehr. Wenn ich versuche den befehl in der Konsole auszuführen macht der auch nichts, im log steht nichts drin

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey,

wie sieht nach derzeitigem Stand deine Core-Klasse aus?

Du musst wahrscheinlich anders auf die Arraylist zugreifen, ich würde an deiner Stelle in der Core-Klasse die Playerlist als Static deklarieren

public static List<String> playerlist = new ArrayList<String>();

und dann über

if (Core.playerlist.contains(pp.getUniqueId().toString()) {
    ...}

bzw.

if (Core.playerlist.contains(pp.getUniqueId()) {
    ...}

auf diese zugreifen.

 

Falls du noch weitere Fragen hast, kannst du dich gerne an mich wenden!

 

Mit freundlichen Grüßen
FireSpirit15

  • Like 2
Link zu diesem Kommentar
Auf anderen Seiten teilen

FireSpiriz15

meine Core Klasse sieht wie folgt aus:

-----------------------------------

package de.alpha_2206.bau;

import java.util.ArrayList;

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

 

public class Core extends JavaPlugin {
    public static ArrayList<String> playerlist = new ArrayList<String>();

    private static Core instance;

    public static Core getInstance() {
        return instance;
    }

    public void OnEnable() {
        instance = this;
        this.getCommand("baustart").setExecutor(new CommandBaustart2());
        this.getCommand("baustop").setExecutor(new CommandBaustop());
        this.getCommand("bautp").setExecutor(new CommandBautp());

    }

    public void onDisable() {
        instance = null;
        System.out.println("Disable Bausystem by Alpha_2206");
    }

}
 

--------------------------------------------

bearbeitet von Alpha_2206
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B