1. 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!

PlugIn Konsolen Command [MySQL Datenbank] [Buycraft]

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


  1. Fackel2907
    Online

    Fackel2907

    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!
     
    Zuletzt von einem Moderator bearbeitet: 23. Mai 2014
  2. Werbung
    Online

    Werbung

  3. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.064
    Geschlecht:
    männlich
    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.
     
    Zuletzt bearbeitet: 23. Mai 2014
  4. Fackel2907
    Online

    Fackel2907

    Es kommt aber immer noch die Fehlermeldung mit dem ColouredConsolSender cannot be cast to Player :/
     
  5. SasukeKawaii
    Offline

    SasukeKawaii Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    1.006
    Geschlecht:
    männlich
    Minecraft:
    SasukeKawaii
    Du darfst auch nirgendwo was zum Player casten sondern einfach den sender benutzen..
     
  6. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.064
    Geschlecht:
    männlich
    Kannst du bitte den Code der ganzen Klasse bzw. der Methode posten, damit man dir einfacher helfen kann?!
     
  7. Fackel2907
    Online

    Fackel2907

    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
     
  8. SasukeKawaii
    Offline

    SasukeKawaii Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    1.006
    Geschlecht:
    männlich
    Minecraft:
    SasukeKawaii
    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.