Jump to content

Befehl der Pex Befehl ausführt


Failcrafter1998

Empfohlene Beiträge

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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

bearbeitet von Starpececraft
Link zu diesem Kommentar
Auf anderen Seiten teilen

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;
	}
	}
	
	
}

 

bearbeitet von Starpececraft
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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.

bearbeitet von Failcrafter1998
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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.

bearbeitet von Failcrafter1998
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

bearbeitet von Failcrafter1998
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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

 

bearbeitet von Failcrafter1998
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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.

bearbeitet von Derya001
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B