Jump to content

Befehl der Pex Befehl ausführt


Failcrafter1998
 Share

Recommended Posts

Guten Tag Liebe Community,

Ich versuche momentan ein Plugin zu Programmieren das Folgendes macht: Wenn ich z.b /Supporter [Name] mache soll dieser Befehl pex user... ausführen. Könnte mir vielleicht jemand bei der Umsetzung dieses Plugins Helfen?

Mit freundlichen Grüßen Patrick

Link to comment
Share on other sites

vor 16 Minuten schrieb Starpececraft:

Guten Tag Liebe Community,

Ich versuche momentan ein Plugin zu Programmieren das Folgendes macht: Wenn ich z.b /Supporter [Name] mache soll dieser Befehl pex user... ausführen. Könnte mir vielleicht jemand bei der Umsetzung dieses Plugins Helfen?

Mit freundlichen Grüßen Patrick

Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group set Supporter");

Link to comment
Share on other sites

So habe es jetzt versucht nur leider stimmt anscheinend etwas mit der Plugin.yml nicht weswegen das Plugin nicht laden will.

So sieht meine Plugin.yml aus:

 

name: Test
version: 0.1
author: Failcrafter1998

main: Me.Failcrafter1998.main
commands:
         test:
             description: Test
             usage:
             permission: test.supporter

 

Kann mir jemand sagen was ich falsch gemacht hab

 

//Edit: Ist Gefixt :D

Edited by Starpececraft
Link to comment
Share on other sites

Noch Etwas wie kann ich eine Error Message im Chat ausgeben wenn kein Name eingeben wird.

Hier mein Code

 

package Me.Failcrafter1998;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class main extends JavaPlugin implements Listener {
	
		public void onEnable() {
		
		}
	
		public void onDisable() {
		
		}
	
	public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args) {
		
		Player p = (Player)sender;
	if (cmd.getName().equalsIgnoreCase("test")) {
		if (p.hasPermission("test.supporter")) {
			if (args.length == 1) {
				Player p2 = getServer().getPlayer(args[0]);
				Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group set Supporter");
				p.sendMessage("Der Spieler " + p2.getName() + " wurde zum Supporter ernnant");
				p2.sendMessage("Du wurdest von " +p.getName() + " zum Supporter ernannt");
			}
		}
		return true;
	}
	else {
		return false;
	}
	}
	
	
}

 

Edited by Starpececraft
Link to comment
Share on other sites

Hab jetzt so geregelt: 

	if (cmd.getName().equalsIgnoreCase("test")) {
		if (p.hasPermission("test.supporter")) {
			if (args.length == 1) {
				Player p2 = getServer().getPlayer(args[0]);
				Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group set Supporter");
				p.sendMessage("Der Spieler " + p2.getName() + " wurde zum Supporter ernnant");
				p2.sendMessage("Du wurdest von " +p.getName() + " zum Supporter ernannt");
			}else{
				p.sendMessage("Test Brah");
			}
		}
		return true;

 

Link to comment
Share on other sites

Nichts anderes habe ich dir gesagt ^^.

Kleiner Tipp, falls du deinen Code noch verbessern möchtest; gib mal dein Kommando ein, aber mit einem Spieler, der nicht online ist.

 

Liebe Grüße,

Baustein

Link to comment
Share on other sites

Folgendes Passiert dann:

[21:20:38] [Server thread/INFO]: Failcrafter1998 issued server command: /Supporter Test
[21:20:39] [Server thread/INFO]: [0;37;1mUser groups set![m
[21:20:39] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'supporter' in plugin MinePhoenix-System v1.0
	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2]
	at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2]
	at org.bukkit.craftbukkit.v1_8_R2.CraftServer.dispatchCommand(CraftServer.java:646) ~[Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2]
	at net.minecraft.server.v1_8_R2.PlayerConnection.handleCommand(PlayerConnection.java:1139) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2]
	at net.minecraft.server.v1_8_R2.PlayerConnection.a(PlayerConnection.java:974) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2]
	at net.minecraft.server.v1_8_R2.PacketPlayInChat.a(PacketPlayInChat.java:45) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2]
	at net.minecraft.server.v1_8_R2.PacketPlayInChat.a(PacketPlayInChat.java:1) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2]
	at net.minecraft.server.v1_8_R2.PlayerConnectionUtils$1.run(SourceFile:13) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2]
	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_92]
	at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_92]
	at net.minecraft.server.v1_8_R2.SystemUtils.a(SourceFile:60) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2]
	at net.minecraft.server.v1_8_R2.MinecraftServer.A(MinecraftServer.java:712) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2]
	at net.minecraft.server.v1_8_R2.DedicatedServer.A(DedicatedServer.java:368) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2]
	at net.minecraft.server.v1_8_R2.MinecraftServer.z(MinecraftServer.java:651) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2]
	at net.minecraft.server.v1_8_R2.MinecraftServer.run(MinecraftServer.java:554) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2]
	at java.lang.Thread.run(Unknown Source) [?:1.8.0_92]
Caused by: java.lang.NullPointerException
	at Me.Failcrafter1998mystem.system.onCommand(system.java:60) ~[?:?]
	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2]
	... 15 more

 

Ich muss wahrscheinlich irgendwo noch etwas einbauen nur wo und was muss ich da einbauen. Bitte nur ein paar Tipps keine Komplett Lösung möchte selbst Lernen.

Edited by Failcrafter1998
Link to comment
Share on other sites

Frag am besten ab, ob der Spieler online ist

if(Bukkit.getPlayer(String) !=null)

Wenn er nicht online ist, kannst du ihn theoretisch als OfflinePlayer deklarieren, dann kannst du auch offline Spieler verwenden :)

Link to comment
Share on other sites

So ich habe es tatsächlich geschafft :D

So sieht es jetzt aus:

	public boolean onCommand (CommandSender sender, Command cmd, String cmdlabel, String[] args) {
		Player p = (Player) sender;
		if (cmd.getName().equalsIgnoreCase("supporter") || cmd.getName().equalsIgnoreCase("Supporter")) {
			if (p.hasPermission("test.supporter")) {
				if (args.length == 1) {
					Player target = Bukkit.getPlayer(args[0]);
					
					if (target !=null) {
						
						Player p2 = Bukkit.getServer().getPlayer(args[0]);
						Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group set Sup");
						p.sendMessage("§6Der Spieler " + p2.getName() + " §6wurde zum Supporter ernnant!");
						p2.sendMessage("§6Du wurdest von" + p.getName() + " §6zum Supporter ernannt!");
						
					} else {
						p.sendMessage("Spieler ist nicht Online!");
					}
				}
			} else {
				p.sendMessage("Bitte gebe einen Spielernamen ein!");
			}
			return true;
		} else {
			return false;
		}
	}

}

 

Ich würde gerne jetzt noch das ganze machen das man den Supporter auch wieder Löschen kann. Nur hätte ich gerne das das Plugin Testet ob der Spieler wirklich in der Gruppe Supporter ist. Wie kann ich das machen. Ich weiß das ich z.b Pex in mein Plugin impotieren muss. Und Folgendes muss ich am Start des Plugins eintrage: PermissionManager pex=null; aber weiter weiß ich nicht. Hier wäre eine bisschen Ausführlichere Erklärung besser.

Edited by Failcrafter1998
Link to comment
Share on other sites

Noch etwas kleines:

Ich habe jetzt einen Command erstellt um den Supporter wieder zu Löschen. Das ganze geht auch soweit nur leider gibt es nen Bug. Wenn der User schon in der Gruppe ist gibt er eine Nachricht aus und dazu noch </command>(Steht so in der Plugin.yml als usage). Ich könnte das </command> einfach Rausnehmen und es wäre gefixt, aber ich möchte gerne meinen Fehler finden.

Hier mein Code:

	public boolean onCommand (CommandSender sender, Command cmd, String cmdlabel, String[] args) {
		Player p = (Player) sender;
		PermissionUser user = PermissionsEx.getUser(p);
		if (cmd.getName().equalsIgnoreCase("supporter")) {
			if (p.hasPermission("test.supporter")) {
				if (args.length == 1) {
					Player target = Bukkit.getPlayer(args[0]);
					if (target !=null) {
						Player p2 = Bukkit.getServer().getPlayer(args[0]);
						Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group set Sup");
						p.sendMessage("§6Der Spieler " + p2.getName() + " §6wurde zum Supporter ernnant!");
						p2.sendMessage("§6Du wurdest von " + p.getName() + " §6zum Supporter ernannt!");
					} else {
						p.sendMessage("§6Der Spieler§c " + args[0] +  "§6 ist nicht Online");
					}
				} else {
					p.sendMessage("§6Bitte gebe einen Spielernamen an!");
				}
			}
		} 
		if (cmd.getName().equalsIgnoreCase("rsupporter")) {
			if (p.hasPermission("test.rsupporer")) {
				if (user.inGroup("Sup")) {
					if (args.length == 1) {
						Player target = Bukkit.getPlayer(args[0]);
						if (target !=null) {
							Player p2 = Bukkit.getServer().getPlayer(args[0]);
							Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group remove Sup");
							p.sendMessage("§6Der Spieler " + p2.getName() + " §6wurde als Supporter entfernt!");
							p2.sendMessage("§6Du wurdest von " + p.getName() + " §6als Supporter entfernt!");
						} else {
							p.sendMessage("§6Der Spieler§c " + args[0] +  "§6 ist nicht Online");
						}
					} else {
						p.sendMessage(" §6Bitte gebe einen Spielernamen an!");
					}
				} else {
					p.sendMessage("§6Der Spieler ist bereits ein Supporter");
				}
			}
		}
		return false;
	}
}

Ps: Bei der letzten els klammer sollte folgendes stehen: Spieler ist kein Supporter

Edited by Failcrafter1998
Link to comment
Share on other sites

Dass du immer die "usage Nachricht" bekommst liegt an dem "return false". Deine Code läuft durch und egal wie, am Ende wird false zurückgegeben. Wann dass der Fall ist, gibt Bukkit dir die Nachricht aus.

 

Zu deinem 2ten Problem, du hast bei deinem Code was durcheinander gewürfelt. Du fragst ab, ob der CommandSender in der Gruppe Sup ist, dann holst du dir den Spieler aus deinem Argument und entfernst ihn aus der Gruppe Sup ? Ändere das erstmal und wenn er dir eine Nachricht ausgibt, wäre es sinnvoll, dass du uns die Nachricht mitteilst.

 

PS: Du deklarierst die Variable target, als Spieler und fragst ab, ob dieser on ist, daraufhin deklarierst du ihn wieder als p2 <- Das brauchst du nicht, du kannst mit der Variable target weiter machen :)

Link to comment
Share on other sites

Gerade eben schrieb Failcrafter1998:

Ich bekomme es irgendwie nicht hin wenn ich alles in einen public boolean mache. Ist es den Klug wenn ich jeden Befehl in einen eigenen boolean machen würde oder ehere nicht?

Nein, dann würde A viel zu lang werden und B bin ich mir nicht sicher, ob das überhaupt funktionieren würde. Hier mal ein Beispiel:

						if (target !=null) {
							Player p2 = Bukkit.getServer().getPlayer(args[0]);
							Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group remove Sup");
							p.sendMessage("§6Der Spieler " + p2.getName() + " §6wurde als Supporter entfernt!");
							p2.sendMessage("§6Du wurdest von " + p.getName() + " §6als Supporter entfernt!");
							return true; //Hier wird true zurück gegeben -> Der Code wird hier gestoppt (True steht indem Fall für 	alles ok, daher bekommst du keine usage Nachricht)
						} else {
							p.sendMessage("§6Der Spieler§c " + args[0] +  "§6 ist nicht Online");
							return false; //Hier wird false zurück gegeben -> Der Code wir hier gestoppt und du bekommst eine usage Nachricht (false steht hier für unvollständig oder nicht richtig ausgeführt)
						}

Allerding kannst du (im Beispiel) das letzte return false weglassen, da du ja am Ende des onCommands kein return false stehen hast.

 

Link to comment
Share on other sites

Mir ist gerade aufgefallen das ich if (user.InGroup("Sup)) dann kann man den Befehl nur als Sup ausführen. Und das ist nicht was ich will. Ich möchte nur das der Spieler nur vom Rang Supporter entfernt wenn er auch Sup ist. Was muss ich da anders machen? Und das mit <command> ist weg :D

 

Edited by Failcrafter1998
Link to comment
Share on other sites

vor 13 Stunden schrieb Joey:

Zu deinem 2ten Problem, du hast bei deinem Code was durcheinander gewürfelt. Du fragst ab, ob der CommandSender in der Gruppe Sup ist, dann holst du dir den Spieler aus deinem Argument und entfernst ihn aus der Gruppe Sup ? Ändere das erstmal und wenn er dir eine Nachricht ausgibt, wäre es sinnvoll, dass du uns die Nachricht mitteilst.

Darauf bin ich bereits eingegangen. Vielleicht solltest du dir solche Sachen mal durchlesen.

Link to comment
Share on other sites

Ich habe jetzt einfach mal versucht einen Zweiten target zu erstellen das hat leider nicht so gut geklappt. Bräuchten noch ein Kleines bisschen mehr Hilfe.

Hier mein Code mit dem Versuch drin:

 

                        Player target = Bukkit.getPlayer(args[0]);
						Player target2 = user.inGroup("Sup");
						if (target !=null) {
							if (target2 !=null) {
								Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group remove Sup");
								p.sendMessage("§6Der Spieler " + target.getName() + " §6ist nun kein Supporter mehr!");
								target.sendMessage("§6Du wurdest von " + p.getName() + " §6als Supporter entfernt!");
							} else {
								p.sendMessage("Kein Sup");
							}

 

Link to comment
Share on other sites

Dein Problem ist dass du ganz schön viele Player-Variablen erstellst, obwohl du von anfang an nur 2 brauchst: Player commandSender und Player target.

Ich habe deinen Code von oben mal modifiziert, auf das wesentliche beschränkt und deine ganzen Variablen und Abfragen sortiert:

public boolean onCommand (CommandSender sender, Command cmd, String cmdlabel, String[] args){ 
	Player commandSender = (Player) sender; 
	if (commandSender.hasPermission("test.supporter")) { 
		if (cmd.getName().equalsIgnoreCase("supporter")) { 
			if (args.length == 1) { 
				Player target = Bukkit.getPlayer(args[0]); 
				if (target !=null) { 
					if (!PermissionsEx.getUser(target).inGroup("Sup")) {
						Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group set Sup"); 
						commandsender.sendMessage("§6Der Spieler " + target.getName() + " §6wurde zum Supporter ernnant!"); 
						target.sendMessage("§6Du wurdest von " + commandSender.getName() + " §6zum Supporter ernannt!"); 
						return true;
					}else{
						commandSender.sendMessage("§6Der Spieler ist bereits ein Supporter");
						return false;
					}
				} else { 
					commandSender.sendMessage("§6Der Spieler§c " + args[0] + "§6 ist nicht Online"); 
					return false;
				} 
			} else { 
				commandSender.sendMessage("§6Bitte gebe einen Spielernamen an!"); 
				return false;
			} 
		} 
		if (cmd.getName().equalsIgnoreCase("rsupporter")) { 
			if (args.length == 1) { 
				Player target = Bukkit.getPlayer(args[0]); 
				if (target !=null) { 
					if (PermissionsEx.getUser(target).inGroup("Sup")) {
						Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group remove Sup"); 
						commandSender.sendMessage("§6Der Spieler " + target.getName() + " §6wurde als Supporter entfernt!"); 
						target.sendMessage("§6Du wurdest von " + commandSender.getName() + " §6als Supporter entfernt!"); 
						return true;
					} else { 
						commandSender.sendMessage("§6Der Spieler§c " + args[0] + "§6 ist kein Supporter"); 
						return false;
					}
				} else { 
					commandSender.sendMessage("§6Der Spieler§c " + args[0] + "§6 ist nicht Online"); 
					return false;
				}
			} else { 
				commandSender.sendMessage(" §6Bitte gebe einen Spielernamen an!"); 
				return false;
			} 
		} 
	}else { 
		commandSender.sendMessage(" §6Du hast nicht die benötigte Berechtigung für diesen Befehl!"); 
		return false;
	} 
	return false;
}

Edit: Versuche beim Programmieren deine Variablen und deine Funktionen zu ordnen. Stell dir immer die Frage: Was will ich machen? Mit wem will ich es machen? Was kann schief gehen? In diesem Fall möchtest du nur mit zwei Instanzen der Player-Klasse arbeiten, dem Sender des Commands und dem "Ziel". Also legst du diese Variablen so früh wie Möglich fest und arbeitest darauf hin nur noch mit deiesen, bis ihre Aufgabe erfüllt ist. Das ist der Fall wenn der Command sSupporter oder supporter  ausgeführt wurde.

Edited by Derya001
Link to comment
Share on other sites

Mal 2 kleine Anmerkungen:

 

1. Wenn du eh schon die PermEx API nutzt, kannst du das doch mit dem dispatchCommand lassen und direkt die Methoden der API nutzen oder ?

2. Player target = Bukkit.getPlayer(args[0]);  Vielleicht solltest du hier nen OfflinePlayer nehmen, wäre ja blöd, wenn du nur Supporter rausschmeißen kannst, wenn sie online sind.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...
B
B