Jump to content

Hilfe beim programmieren


Empfohlene Beiträge

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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:

bearbeitet von Salocin
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

bearbeitet von TuxGamer
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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.

bearbeitet von Salocin
Link zu diesem Kommentar
Auf anderen Seiten teilen

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);}
bearbeitet von idk.cpp
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

bearbeitet von DarkCookieee.de
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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?

bearbeitet von AhmedKing
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

bearbeitet von 4w3s0m3G4m3r
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

bearbeitet von Salocin
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

bearbeitet von idk.cpp
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