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

Konsolen Command [MySQL Datenbank] [Buycraft]

F

Fackel2907

Guest
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:
if(cmd.getName().equalsIgnoreCase("tokenssadd")) {
			
			if(sender instanceof Player) {
				
				if(p.isOp()) {
					
					
					if(args.length == 0) {
						
						p.sendMessage("§6Falsche Benutzung: /tokenssadd Spieler Anzahl");
						
						return true;
						
					}
					
					if(args.length == 1) {
						
					    p.sendMessage("§6Falsche Benutzung: /tokenssadd Spieler Anzahl");
						
						return true;
						
					}
					
					if(args.length == 2) {
						
						@SuppressWarnings("deprecation")
						UUID uuid = Bukkit.getOfflinePlayer(args[0].toString()).getUniqueId(); //>> Herausfinden der UUID von den Argumenten (Offline-Spieler)
						
						@SuppressWarnings("deprecation")
						String name = Bukkit.getOfflinePlayer(args[0].toString()).getName();//>> Herausfinden des Namens anhand der UUID (Offline-Spieler)
						
						String ding = uuid.toString();
						
						this.addTokensOffline(ding, Integer.parseInt(args[1].toString()));
						
						p.sendMessage("§6Du hast erfolgreich dem Spieler §c" + name + " §e" + Integer.parseInt(args[1].toString()) + " §6hinzugefügt.");
						
						return true;
						
					}
					
					
				} else {
					
					p.sendMessage("§8Du hast keine Rechte dazu.");
					
					return true;
					
				}
				
			} else {
				
				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
				
				return true;
				
			}
			
		}

Danke im Voraus!
 
Zuletzt bearbeitet von einem Moderator:

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
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:
F

Fackel2907

Guest
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.

Es kommt aber immer noch die Fehlermeldung mit dem ColouredConsolSender cannot be cast to Player :/
 
F

Fackel2907

Guest
Kannst du bitte den Code der ganzen Klasse bzw. der Methode posten, damit man dir einfacher helfen kann?!

Code:
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

		Player p = (Player) sender;

		PermissionUser user = Permission***.getPermissionManager().getUser(p.getUniqueId());

	public int getTokensOffline(String id) {
		
		
		String UUID = id;
		int tokens = 0;
		try {
			Statement ssd = shop().createStatement();
			ResultSet res = ssd.executeQuery("SELECT * FROM TokensCounter WHERE Name = '" + UUID + "';");
			res.next();
			if(res.getString("Name") == null) {
				tokens = 0;
			} else {
				tokens = res.getInt("Anzahl");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return tokens;


	}

	public void addTokensOffline(String uuid, int amount) {
		
		try {
			Statement ssd = shop().createStatement();
			ssd.executeUpdate("UPDATE `TokensCounter` SET Anzahl = '" + (getTokensOffline(uuid) + amount) + "' WHERE Name = '" + uuid +"';");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
	}

- - - Aktualisiert - - -

Code:
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

		Player p = (Player) sender;

		PermissionUser user = Permission***.getPermissionManager().getUser(p.getUniqueId());

	public int getTokensOffline(String id) {
		
		
		String UUID = id;
		int tokens = 0;
		try {
			Statement ssd = shop().createStatement();
			ResultSet res = ssd.executeQuery("SELECT * FROM TokensCounter WHERE Name = '" + UUID + "';");
			res.next();
			if(res.getString("Name") == null) {
				tokens = 0;
			} else {
				tokens = res.getInt("Anzahl");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return tokens;


	}

	public void addTokensOffline(String uuid, int amount) {
		
		try {
			Statement ssd = shop().createStatement();
			ssd.executeUpdate("UPDATE `TokensCounter` SET Anzahl = '" + (getTokensOffline(uuid) + amount) + "' WHERE Name = '" + uuid +"';");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
	}
Die Methoden für MySQL sind übrigens nicht in der Command-Methode. Ist nur ein Kopierfehler xD
 
Oben