Jump to content

Hilfe beim programmieren


AhmedKing
 Share

Recommended Posts

Hallo libe Community ich habe ein frage und zwar kann mir einer Helfen wie ich machen kann wen der Spieler Marviin on ist das der name nicht mehr Grau ist sondern Gelb...

if(cmd.getName().equalsIgnoreCase("Team")){            if(args.length == 0){               p.sendMessage(ChatColor.DARK_RED + "Owner:" + ChatColor.DARK_GRAY + " Marviin ");

hier ist schon der Anfang bitte helft mir danke

MFG AhmedKing

Link to comment
Share on other sites

Ich verstehe nicht ganz was du meinst.

Du willst das Owner: in rot ausgegeben wird, schreiben tut dieser in Grau und der Name des Owners soll dann gelb sein?

Bin grad echt verpeilt und müde, tut mir Leid wenn das ganze total offensichtlich ist und ich das grad nicht blicke ^^

Link to comment
Share on other sites

Außerdem: Warum arbeitest du mit einem Command? Willst du nicht lieber das PlayerLoginEvent abfangen?

//Edit Achso habs falsch verstanden ^^:

Meinst du so:

 p.sendMessage(ChatColor.DARK_RED + "Owner:" + ChatColor.YELLOW + " Marviin ");

Kann ich mir iwie kaum vorstellen :huh:

Edited by Salocin
Link to comment
Share on other sites

Ich verstehe auch nicht genau, was jetzt ist, aber ich hätte zwei kleine Vorschläge:

Sagen wir, dein onCommand sieht c.a. so aus:

onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)

dann kannst du an Stelle von cmd.getName() auch commandLabel benutzen, das spart ein paar Ressourcen.

Außerdem schreibe in einem equalsIgnoreCare am besten alles klein. Damit sparst auch auch ein paar Bytes RAM und ein paar Rechnungen des Prozessors.

Auch wenn man keinen Unterschied spürt ^^

EDIT: Ich kann auch nicht lesen. Also:

Du musst den Spieler Marviin in ein Player Object umwandeln.

Das kannst du mit Bukkit.getPlayer("Marviin").

Wenn der jetzt online ist, also Bukkit.getPlayer("Marviin").isOnline(), kannst du die ChatColor GOLD benutzen, aso Dunkelgelb.

Der Code sähe dann so aus:

onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {    if (args.length == 0) {        if (Bukkit.getPlayer("Marviin").isOnline()) {            sender.sendMessage(ChatColor.DARK_RED + "Owner: " + ChatColor.GOLD + "Marviin");        } else {            sender.sendMessage(ChatColor.DARK_RED + "Owner: " + ChatColor.DARK_GRAY + "Marviin");        }    }}

Tipp: Ich nutze nicht mehr ChatColor, sondern einfach ?4 für Rot und so weiter. Das geht (für mich) einfacher

~Tuxi

Edited by TuxGamer
Link to comment
Share on other sites

Ist aber besser, Konstanten zu nehmen. Es könnte ja sein, das iwann ein Wert verändert wird (Wird sowieso nie passieren). Außerdem lesen sich solche Konstanten besser. Ist zwar mehr Schreibarbeit, dafür wird der Code aber auch nicht so kryptisch.

Link to comment
Share on other sites

ich habe nur Dieses Plugin auf der Console!

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {         if(!(sender instanceof Player)){            return false;            }         //Team                  if(cmd.getName().equalsIgnoreCase("Team")){            if(args.length == 0){               if(Bukkit.getPlayer("Marviin").isOnline()){                                 sender.sendMessage(ChatColor.DARK_RED + "Owner: " + ChatColor.YELLOW + "Marviin");                                 } else {               sender.sendMessage(ChatColor.DARK_RED + "Owner:" + ChatColor.DARK_GRAY + " Marviin");                                                }                  }            }            return false;      }}
Link to comment
Share on other sites

Für mehrere Spieler würde ich jetzt ein Stringarray für das Team anlegen. Das sieht dann so aus:

String[] team = { "Marviin", "Spieler2", "Spieler3"};for(String member : team) {  String rank;  if(member.equals("Marviin"))    rank = ChatColor.DARK_RED + "Owner";  else    rank = ChatColor.DARK_RED + "Admin";  if(Bukkit.getOfflinePlayer(member).isOnline())     sender.sendMessage(rank + ChatColor.YELLOW + member);  else     sender.sendMessage(rank + ChatColor.DARK_GRAY + member);}

So sollte es gehen.

Edited by Salocin
Link to comment
Share on other sites

Ich hab das jz mal so verstanden,, dass du mit /team eine Liste an Teammitgliedern abrufen willst von denen die, die on sind YELLOW und die, die off sind DARK_GREY gefärbt sind.

Das hätte ich so gemacht:

(Vorausgesetzt du hast ein Plg wie GroupManager, PermissionsEx odgl. welches die Displaynames ändert)

onCommand [...] {  [...]  String[] teamMitglieder;  // hier evtl. eine Funktion zum lesen aus einer Datei oder so    StringBuffer sb = new StringBuffer();  for (String mitglied : teamMitglieder) {    if (Bukkit.getPlayer(mitglied).isOnline()) {      sb.append(ChatColor.YELLOW);    } else {      sb.append(ChatColor.DARK_GREY);    }    sb.append(mitglied + ", ");  }  String msg = sb.toString();  msg = msg.substring(0, msg.length()-2);  // Zum entfernen des letzten Beistriches    sender.sendMessage(/*evtl. prefix wie "unsere Teammitglieder: " */ msg);}
Edited by idk.cpp
Link to comment
Share on other sites

ich habe nur Dieses Plugin auf der Console!

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {         if(!(sender instanceof Player)){            return false;            }         //Team                  if(cmd.getName().equalsIgnoreCase("Team")){            if(args.length == 0){               if(Bukkit.getPlayer("Marviin").isOnline()){                                 sender.sendMessage(ChatColor.DARK_RED + "Owner: " + ChatColor.YELLOW + "Marviin");                                 } else {               sender.sendMessage(ChatColor.DARK_RED + "Owner:" + ChatColor.DARK_GRAY + " Marviin");                                                }                  }            }            return false;      }}

Ich würde sagen, du hast die plugin.yml nicht erstellt oder nicht korrekt bearbeitet..

Ohne Error-Code von der Konsole kann man sowieso nicht groß weiterhelfen..

Jetzt wäre es auch nicht falsch, das Problem noch einmal ausführlich zu schildern.. Ich habe dein Problem nicht wirklich verstanden.

Wie's aussieht bist du auch nicht wirklich gut mit Java Vertraut. Da würde ich ein Java Buch empfehlen.

- Cookey

Edited by DarkCookieee.de
Link to comment
Share on other sites

An der Plugin.yml kann es aber nicht liegen, dann würde er das Plugin gar nicht laden.

Ich habe ihn so verstanden, dass er einen Error bekommt, wenn er dem Sender eine weitere Nachricht sendet.

Edited by Salocin
Link to comment
Share on other sites

Also nichmal für alle ich habe ein plguin.yml erstellt das Plugin geht auch nur wenn ich /team eigebe kommt "An internal error occurred while attempting to perform this command"

ich weiß echt nicht warum es nicht geht :(

Wenn ich /team eingebe komm in der Console:

[Info] Marviin issued server command: /team[Server] nullorg.Bukkit.command.CommandException: Unhandled exeption executing command 'team' in plugin Team v.1.1at org.bukkit..command.PluginCommand.execute<PluginCommand.java:44>at org.bukkit..command.PluginCommand.dispatch<SimpleCommandMap.java:189>at org.bukkit.craftbukkit.v1_6_R2.CraftServer.dispatchCommand<CraftServer.java.523>at net.minecraft.server.v1_6_R2.PlayerConnection.handleCommand<PlayerConnection.java:964>[//Hier müsste noch mehr stehen ist aber glaub ich unwichtig sonst einfach posten dann schreib ichs auch noch rein]Caused by: java.lang.NullPointerExeption			   at me.Marviin.Team.Team.onCommand<Team.java:35>			   at org.bukkit.command.PluginCommand.execute<PluginCommand.java:44>			   ... 15 more

So das war die Conolse.

MFG AhmedKing

Link to comment
Share on other sites

if(cmd.getName().equalsIgnoreCase("Team")){

das ist wohl nicht die erste Zeile...

im StackTrace steht, dass der Fehler vermutlich in Zeile 35 steckt...

Falls folgendes die Zeile 35 ist,

p.sendMessage(ChatColor.DARK_RED + "Owner:" + ChatColor.DARK_GRAY + " Marviin ");

ist der Fehler wahrscheinlich, dass p == null

Wo ist p definiert? Wie wird p zugewiesen?

Link to comment
Share on other sites

Danke für die Antworten

@salocin

if(Bukkit.getOfflinePlayer(member).isOnline())sender.sendMessage(rank + ChatColor.YELLOW + member);elsesender.sendMessage(rank + ChatColor.DARK_GRAY + member);

das else stimmt nicht kann man das irgendwie anders machen?

Edited by AhmedKing
Link to comment
Share on other sites

  • 2 months later...

das else stimmt nicht kann man das irgendwie anders machen?

if(Bukkit.getOfflinePlayer(member).isOnline())sender.sendMessage(rank + ChatColor.YELLOW + member);elsesender.sendMessage(rank + ChatColor.DARK_GRAY + member);

Das ist glaub ich was falsch dran ;)

Du hast 1. Die { } vergessen bei if (...) und else (...)

Und du hast else { sender.send.....} zusammen geschrieben

Versuchs mal hiermit:

if(Bukkit.getOfflinePlayer(member).isOnline()) {sender.sendMessage(rank + ChatColor.YELLOW + member);}else { sender.sendMessage(rank + ChatColor.DARK_GRAY + member); }

LG 4w3s0m3G4m3r (oder MrAwesome , für die die es sich nicht merken können :P )

Edited by 4w3s0m3G4m3r
Link to comment
Share on other sites

Muss ich idk.cpp zustimmen. Die {} brauch man bei einerAnweisung nicht. Ich hab mir das so angewöhnt, es ist aber nicht falsch.

Mit dem else: Die Abstände sind iwie verbuggt, hier noch mal der Ursprüngliche Code:

String[] team = { "Marviin", "Spieler2", "Spieler3"};

for(String member : team) {  

     String rank;  

     if(member.equals("Marviin"))    

          rank = ChatColor.DARK_RED + "Owner";  

     else    

          rank = ChatColor.DARK_RED + "Admin";  


     if(Bukkit.getOfflinePlayer(member).isOnline())     

          sender.sendMessage(rank + ChatColor.YELLOW + member);  

     else     

          sender.sendMessage(rank + ChatColor.DARK_GRAY + member);

}

http://pastebin.com/ZMdj0G6Z

Edited by Salocin
Link to comment
Share on other sites

Also ich würde das wie folgt machen, dabei benutze ich die Klasse "Utilman" die es nicht gibt. In dieser Klasse stehen dann Funktionen die mir spezielle Dinge verraten. Wie das in der Klasse Utilman gelöst ist, ist eine andere Geschichte.

[...]String[] teammitglieder = Utilman.getAllFromTeam();Set<String> owner = new Set<>(); // Ich weiß dass das nicht geht, hier einfach das set deiner wahl nehmenSet<String> admin = new Set<>();Set<String> mod = new Set<>();Set<String> sup = new Set<>();for (String str: teammitglieder) {    if (Utilman.isAdmin(str))        if (Bukkit.getOfflinePlayer(str).isOnline())            admin.add(ChatColor.YELLOW + str);        else            admin.add(ChatColor.DARK_GREY + str);    if (Utilman.isOwner(str))        if (Bukkit.getOfflinePlayer(str).isOnline())            owner.add(ChatColor.YELLOW + str);        else            owner.add(ChatColor.DARK_GREY + str);    if (Utilman.isMod(str))        if (Bukkit.getOfflinePlayer(str).isOnline())            mod.add(ChatColor.YELLOW + str);        else            mod.add(ChatColor.DARK_GREY + str);    if (Utilman.isSup(str))         if (Bukkit.getOfflinePlayer(str).isOnline())            sup.add(ChatColor.YELLOW + str);        else            sup.add(ChatColor.DARK_GREY + str);}String res = "";for (String str : owner) {    res += "; " + str;}sender.sendMessage("Owner: " + res.substring(2));res = "";for (String str : admin) {    res += "; " + str;}sender.sendMessage("Admin: " + res.substring(2));res = "";for (String str : mod) {    res += "; " + str;}sender.sendMessage("Mod: " + res.substring(2));res = "";for (String str : owner) {    res += "; " + str;}sender.sendMessage("Supporter: " + res.substring(2));

Die Utilman Klasse findet also heraus welche Teammember es gibt und welchen Rang sie haben...

Konnte dir das helfen?

idk.java

Edited by idk.cpp
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...
B