ServerPlugin Konsolen Befehl

Dieses Thema im Forum "Programmierung" wurde erstellt von combo, 18. Mai 2014.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. combo
    Offline

    combo

    Registriert seit:
    16. Juli 2012
    Beiträge:
    160
    Minecraft:
    combo5
    Hallo leute,
    ich habe einen Befehl geschrieben der allen Spielern die Online sind und eine bestimmte Permission besitzen sollen eine Nachricht bekommen aber dieser befehl soll in der Konsole ausgeführt werden! Doch dann bekomme ich die Fehler meldung:
    Code (Text):
    1.        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) ~[spigot.jar:git-Spigot-1387]
    2.         at org.bukkit.craftbukkit.v1_7_R2.CraftServer.dispatchCommand(CraftServe
    3. r.java:719) ~[spigot.jar:git-Spigot-1387]
    4.         at org.bukkit.craftbukkit.v1_7_R2.CraftServer.dispatchServerCommand(Craf
    5. tServer.java:706) [spigot.jar:git-Spigot-1387]
    6.         at net.minecraft.server.v1_7_R2.DedicatedServer.ax(DedicatedServer.java:
    7. 309) [spigot.jar:git-Spigot-1387]
    8.         at net.minecraft.server.v1_7_R2.DedicatedServer.v(DedicatedServer.java:2
    9. 74) [spigot.jar:git-Spigot-1387]
    10.         at net.minecraft.server.v1_7_R2.MinecraftServer.u(MinecraftServer.java:5
    11. 68) [spigot.jar:git-Spigot-1387]
    12.         at net.minecraft.server.v1_7_R2.MinecraftServer.run(MinecraftServer.java
    13. :474) [spigot.jar:git-Spigot-1387]
    14.         at net.minecraft.server.v1_7_R2.ThreadServerApplication.run(SourceFile:6
    15. 18) [spigot.jar:git-Spigot-1387]
    16. Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_7_R2.command.
    17. ColouredConsoleSender cannot be cast to org.bukkit.entity.Player
    18.         at de.combo.rregionen.onCommand(rregionen.java:20) ~[?:?]
    19.         at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spi
    20. got.jar:git-Spigot-1387]
    21.         ... 8 more
    22. >
    23.  

    Und mein geschriebener Code lautet:

    Code (Text):
    1. if(cmd.getName().equalsIgnoreCase("ft2")) {
    2.     for(Player player11: getServer().getOnlinePlayers()) {
    3.                 if(player11.hasPermission("rregionen.ft")) {
    4.                     player11.sendMessage("§9Test");
    5.              
    6.                 }
    7.             }
    8.  
    9.  
    10.         }
    11.     return true;   
    12.  
    Ich hoffe ihr könnt mir den Fehler zeigen. Ich suche schon seit stunden
    danke
     
    #1
  2. [Dev] iTzSasukeHDxLP
    Online

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    org.bukkit.craftbukkit.v1_7_R2.command.
    ColouredConsoleSender cannot be cast to org.bukkit.entity.Player

    >> Vermutlich was falsches importiert ;)
     
    #2
  3. combo
    Offline

    combo

    Registriert seit:
    16. Juli 2012
    Beiträge:
    160
    Minecraft:
    combo5
    Habe mal meine Java Build Path aufgelistet und die Imports
    Java Build Path:
    - bukkit 1.7.9-R0.1
    - WGCostumFlags
    - WGRegionEvents
    - WorldGuard

    Imports:
    org.bukkit.command.Command;
    org.bukkit.command.CommandSender;
    org.bukkit.entity.Player;
    org.bukkit.plugin.java.JavaPlugin;
     
    #3
  4. Du wirst den CommandSender zum Spieler ungecheckt gecastet haben, dann ist es klar, dass entsprechendes nicht funktioniert. Dabei ist dein Auszug nicht der verursachende.
     
    #4
  5. combo
    Offline

    combo

    Registriert seit:
    16. Juli 2012
    Beiträge:
    160
    Minecraft:
    combo5
    Aber wenn ich
    Code (Text):
    1.  
    2. if(sender instanceof Player) {
    3. }
    4.  
    verwende wird die nachricht gesendet wen man ein Spieler ist
    aber soll ja von der Konsole ausgeführt werden.

    Vielleicht so?
    Code (Text):
    1.  
    2. if(sender instanceof ConsoleCommandSender) {
    3. }
    4.  
     
    #5
  6. Weißt du, es gibt seine Gründe, wieso ein CommandSender übergeben wird und kein Player und kein ConsoleCommandSender.

    Für einfache Commands ist es in der Regel vollkommen irrelevant, wer von den beiden Typen den Befehl gesendet hat, daher schreibt dieses Interface die meisten Methoden vor. Da muss nichts gecastet werden. Vielfach entsteht dabei sogar noch ein schlechter Stil.
     
    #6
  7. combo
    Offline

    combo

    Registriert seit:
    16. Juli 2012
    Beiträge:
    160
    Minecraft:
    combo5
    Wenn ich das aber nicht Checke kommt die gleiche Fehlermeldung
    Aber auch bei ConsoleCommandSender kommt die Fehler meldung
     
    #7
  8. Du sollst auch nicht ohne Check casten. Genausowenig solltst du unnötig casten.

    Ansonsten zeige deinen entsprechenden Quellcode.
     
    #8
  9. combo
    Offline

    combo

    Registriert seit:
    16. Juli 2012
    Beiträge:
    160
    Minecraft:
    combo5
    Habe momentan nur eine Main Klasse:
    Code (Text):
    1.  
    2. package de.combo;
    3.  
    4. import org.bukkit.command.Command;
    5. import org.bukkit.command.CommandSender;
    6. import org.bukkit.command.ConsoleCommandSender;
    7. import org.bukkit.entity.Player;
    8. import org.bukkit.plugin.java.JavaPlugin;
    9.  
    10.  
    11. public class rregionen extends JavaPlugin {
    12.  
    13.  
    14. public void onEnable() {
    15.      this.getLogger().info("RRegionen Aktiviert!");
    16.      
    17.  }
    18. public void onDisable() {
    19.     this.getLogger().info("RRegionen Deaktiviert!");
    20. }
    21.  
    22. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    23.     Player player = (Player) sender;
    24.  
    25.     if(cmd.getName().equalsIgnoreCase("ftzstadt")) {
    26.             if (player instanceof Player) { //Hier muss es ein Spieler sein
    27.             Player player1 = (Player) player;
    28.             if(player1.hasPermission("rregionen.z")) {
    29. player1.sendMessage("&6 - Wilkommen in der Zwergen Stadt - ");
    30.             }
    31.             return true;   
    32.                 }
    33. if(cmd.getName().equalsIgnoreCase("ft2")) {
    34.     if (player instanceof Player) {  //Code von vor dem Thread (Hier von Konsole)
    35.     for(Player player11: getServer().getOnlinePlayers()) {
    36.                 if(player11.hasPermission("rregionen.ft")) {
    37.                     player11.sendMessage("§9Test");
    38.                 }
    39.                 }
    40.             }
    41.  
    42.  
    43.  
    44.  
    45.     return true;   
    46. }
    47.  
    48.  
    49.         return false;
    50. }
    51.  
     
    #9
  10. [Dev] iTzSasukeHDxLP
    Online

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Code (Text):
    1. [COLOR=#444444]Player player = (Player) sender;[/COLOR]
    Wenns die Konsole macht kriegste nen Fehler ins Face.
     
    #10
  11. combo
    Offline

    combo

    Registriert seit:
    16. Juli 2012
    Beiträge:
    160
    Minecraft:
    combo5
    Die Fehlermeldung ist nun weg aber seine Funktion tut der Befehl aber noch nicht.
    Wenn ich ihn jetzt als Spieler eingebe kommt keine Nachricht und in der Konsole passiert auch nichts
     
    #11
  12. Genau das steht da auch so, jedenfalls gibt es hier genügend Hilfestellunge, sodass es nicht mehr nötig ist dieses Thema offen zu lassen.

    PS: Für deinen 'anderen' Fehler solltest du einfach mal die Blöcke überprüfen.
     
    #12
Status des Themas:
Es sind keine weiteren Antworten möglich.