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

Komische Ausgabe (fehler in for Schleife?)

CodEr

Minecrafter
Registriert
20 April 2014
Beiträge
8
Diamanten
0
Hallo! Ich habe folgenden Code (ja in nur einer Klasse ;)):

Code:
package me.name.btfhelp;

import java.util.ArrayList;
import java.util.HashMap;

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

public class Main extends JavaPlugin{
	
	String pl = "§6[BTFHelp] ";
	ArrayList<String> hilfen = new ArrayList<String>();
	ArrayList<String> players = new ArrayList<String>();
	
	@Override
	public void onEnable(){
		System.out.println("[BTFHelp] Geladen");
		
	}
	
	@Override
	public void onDisable(){
		System.out.println("[BTFHelp] Deaktiviert");
		
	}
	
	
	public boolean onCommand(CommandSender sender, Command cmd, String cmdlabel, String[] args){
		Player p = (Player) sender;
		
		if(cmd.getName().equalsIgnoreCase("hilfe")){
			if(p.hasPermission("BTFHelp.hilfe") || p.isOnline()){
				//CHANGE isOp
				if(args.length >= 1){
				
					String allArguments = "";
					
					 for(int i = 0; i < args.length; i++){
                         
                         allArguments += "§3" + args[i] + " ";
                         
                           
                         
                     }
					 
					 hilfen.add(allArguments);
					 players.add(p.getName());
					 
			        p.sendMessage(pl + "§aTicket erstellt! Bitte warte auf hilfe! Wenn du offline gehst bekommst du eine Nachricht wenn dir jemand hilft! Mache dann §4/helpmail");
					
					
					
					
					
					
				}else{
					p.sendMessage(pl + "§cBenutze /hilfe [Was brauchst du?]");
					
				}
				
				
			}else{
				
				p.sendMessage("§6[BTFHelp]§c Du hast keine Rechte dazu!");
				
			}
			
			
			
			return true;
		}
		
		if(cmd.getName().equalsIgnoreCase("helfen")){
			if(p.hasPermission("BTFHelp.helfen") || p.isOp()){
				if(!hilfen.isEmpty() && !players.isEmpty()){
					Player need = Bukkit.getServer().getPlayer(players.get(0));
					String nhelp = hilfen.get(0);
					if(need.isOnline()){
						p.sendMessage(pl + "§aDu hilfst nun §3" + need.getName());
						p.sendMessage("§aSein Problem: §a" + nhelp);
						need.sendMessage(pl + "§aDer Supporter§3 " + p.getName() + " §awird sich um dich kümmern!");
						
						Location needl = need.getLocation();
						p.teleport(needl);
						
						hilfen.remove(hilfen.get(0));
						players.remove(players.get(0));
						
						
						
					}else{
						return false;
						
						
					}
					
					
					
				}else{
					p.sendMessage(pl + "§cNiemand braucht gerade Hilfe!");
					
				}
				
				
				
			}else{
				
				p.sendMessage("§6[BTFHelp]§c Du hast keine Rechte dazu!");
			}
			
			return true;
			
		}
		
		
		
		
	
		
		return false;
		
	}
	

}

Wenn ich jetzt /helfen mache werde ich zu dem Spieler tpt und mir wird sein Problem angezeigt. Problem:

Wenn der Spieler das Problem Bitte Hilfe hat dann sieht es bei /helfen so aus:

1. Mal /helfen: der Spieler hast das Problem: Bitte
2. Mal /helfen: der Spieler hat das Problem: Bitte Hilfe


Warum wird beim ersten mal nur das erste Argument angezeigt? Ich denke das ist in der for-Schleife geregelt?

Danke!



Ps: Mache gerade ein Wett-coden wäre also nett wenn mir jemand hilft ;)
 
G

games6471

Guest
Zunächst ein paar Hinweise gegen zukünftige Fehler, die mir gerade auf die schnelle aufgefallen sind.

1.Du solltest nicht auf bei einem Command den sender zu einem Player casten, es könnte nämlich auch ein Spieler sein, der diesen Befehl ausführt (Zeile 33).
2. Wenn Bukkit kein Spieler findet, wird null zurückgegeben und kein Player Objekt, dass man mit .isOnline abfragen kann (Zeile 80). Also kann dies zu einer NullPointerException führen, da keine Null-Prüfung existiert.
3. Wenn du schon den genauen Namen speicherst, kannst du gleich getPlayerExact aufrufen (Zeile 69), da dort nicht nach dem ähnlichsten Namen gesucht wird und du somit auch den wirklich richtigen Spieler findest.
4. p.isOnline wird immer wahr zurückgegeben (Zeile 36), das bedeutet, dass der der Spieler gar nicht die Permission benötigt.
5. Wenn der Spieler nicht online ist wird der Eintrag nicht von der Liste gelöscht und man wird somit immer wieder den selben Eintrag bekommen, bis der Spieler online UND man den Eintrag abruft (Zeile 90f.) Zusätzlich wird der Admin, Moderator, etc. nicht ordentlich informiert, wenn der Spieler offline ist.

Kannst du mal genau posten, wie der Befehl ausgeführt wurde, um eine schnellere Fehleranalyse durchzuführen?
 
Oben