ServerPlugin Konsolen Command [MySQL Datenbank] [Buycraft]

Dieses Thema im Forum "Programmierung" wurde erstellt von Fackel2907, 23. Mai 2014.

  1. Fackel2907
    Offline

    Fackel2907

    Registriert seit:
    8. August 2013
    Beiträge:
    5
    Joa, ich melde mich auch mal wieder hier. Nach langer Zeit. ^^

    Bräuchte ma eure Hilfe.
    Ich brauch einen Command, der über Konsole genauso funktioniert wie InGame. Er muss eben per Buycraft das gleiche ausführen wie z.B. ein Admin auf dem Server.

    Hier mein Code:
    Code (Text):
    1. if(cmd.getName().equalsIgnoreCase("tokenssadd")) {
    2.            
    3.             if(sender instanceof Player) {
    4.                
    5.                 if(p.isOp()) {
    6.                    
    7.                    
    8.                     if(args.length == 0) {
    9.                        
    10.                         p.sendMessage("§6Falsche Benutzung: /tokenssadd Spieler Anzahl");
    11.                        
    12.                         return true;
    13.                        
    14.                     }
    15.                    
    16.                     if(args.length == 1) {
    17.                        
    18.                         p.sendMessage("§6Falsche Benutzung: /tokenssadd Spieler Anzahl");
    19.                        
    20.                         return true;
    21.                        
    22.                     }
    23.                    
    24.                     if(args.length == 2) {
    25.                        
    26.                         @SuppressWarnings("deprecation")
    27.                         UUID uuid = Bukkit.getOfflinePlayer(args[0].toString()).getUniqueId(); //>> Herausfinden der UUID von den Argumenten (Offline-Spieler)
    28.                        
    29.                         @SuppressWarnings("deprecation")
    30.                         String name = Bukkit.getOfflinePlayer(args[0].toString()).getName();//>> Herausfinden des Namens anhand der UUID (Offline-Spieler)
    31.                        
    32.                         String ding = uuid.toString();
    33.                        
    34.                         this.addTokensOffline(ding, Integer.parseInt(args[1].toString()));
    35.                        
    36.                         p.sendMessage("§6Du hast erfolgreich dem Spieler §c" + name + " §e" + Integer.parseInt(args[1].toString()) + " §6hinzugefügt.");
    37.                        
    38.                         return true;
    39.                        
    40.                     }
    41.                    
    42.                    
    43.                 } else {
    44.                    
    45.                     p.sendMessage("§8Du hast keine Rechte dazu.");
    46.                    
    47.                     return true;
    48.                    
    49.                 }
    50.                
    51.             } else {
    52.                
    53.                 Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tokensadd" + args[0] + " " + args[1]); // Damit das ganze auch durch die Konsole funktioniert, keine Ahnung ob das die richtige Methode ist. In der Konsole kommt immer die Fehlermeldung: org.bukkit.craftbukkit.v1_7_R3.command.ColouredConsoleSender cannot be cast to org.bukkit.entity.Player
    54.                
    55.                 return true;
    56.                
    57.             }
    58.            
    59.         }
    Danke im Voraus!
     
    #1
  2. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Es ist egal, ob es sich bei dem CommandSender um einen Player oder den ConsoleSender handelt. Du musst nur überprüfen, ob der CommandSender (sender) die entsprechende Rechte hat. "sender.hasPermission("my.custom.permission")". "sender.isOp()" ist auch möglich.
    Du musst aber das "sender instanceof Player" wegmachen, da es sonst nur funktioniert, wenn man den Befehl als Spieler ausführt.
     
    #2
  3. Fackel2907
    Offline

    Fackel2907

    Registriert seit:
    8. August 2013
    Beiträge:
    5
    Es kommt aber immer noch die Fehlermeldung mit dem ColouredConsolSender cannot be cast to Player :/
     
    #3
  4. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Du darfst auch nirgendwo was zum Player casten sondern einfach den sender benutzen..
     
    #4
  5. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Kannst du bitte den Code der ganzen Klasse bzw. der Methode posten, damit man dir einfacher helfen kann?!
     
    #5
  6. Fackel2907
    Offline

    Fackel2907

    Registriert seit:
    8. August 2013
    Beiträge:
    5
    Code (Text):
    1.     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    2.  
    3.         Player p = (Player) sender;
    4.  
    5.         PermissionUser user = PermissionsEx.getPermissionManager().getUser(p.getUniqueId());
    6.  
    7.     public int getTokensOffline(String id) {
    8.        
    9.        
    10.         String UUID = id;
    11.         int tokens = 0;
    12.         try {
    13.             Statement ssd = shop().createStatement();
    14.             ResultSet res = ssd.executeQuery("SELECT * FROM TokensCounter WHERE Name = '" + UUID + "';");
    15.             res.next();
    16.             if(res.getString("Name") == null) {
    17.                 tokens = 0;
    18.             } else {
    19.                 tokens = res.getInt("Anzahl");
    20.             }
    21.         } catch (SQLException e) {
    22.             e.printStackTrace();
    23.         }
    24.         return tokens;
    25.  
    26.  
    27.     }
    28.  
    29.     public void addTokensOffline(String uuid, int amount) {
    30.        
    31.         try {
    32.             Statement ssd = shop().createStatement();
    33.             ssd.executeUpdate("UPDATE `TokensCounter` SET Anzahl = '" + (getTokensOffline(uuid) + amount) + "' WHERE Name = '" + uuid +"';");
    34.         } catch (SQLException e) {
    35.             e.printStackTrace();
    36.         }
    37.        
    38.        
    39.     }
    40.  
    41.  
    - - - Aktualisiert - - -

    Die Methoden für MySQL sind übrigens nicht in der Command-Methode. Ist nur ein Kopierfehler xD
     
    #6
  7. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Du machst direkt am Anfang das hier:

    Code (Text):
    1. [COLOR=#444444][I]Player p = (Player) sender;[/I][/COLOR]
    Dann wirft dir Java deinen Code allerdings um die Ohren, wenn der CommandSender sender die Konsole war.
     
    #7