bukkit
commando's
Zoeken…
Syntaxis
@Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
Een opdracht afhandelen
Om een opdracht uit te voeren, moet u een klasse hebben die de CommandExecutor-interface implementeert. De JavaPlugin-klasse (de hoofdklasse van uw plug-in) implementeert dit al.
Bij het implementeren van de CommandExecutor-interface moet de volgende methode worden geïmplementeerd:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
//Handle your command in here
return true; ///Should return false if you want to show the usage
}
Afzender is degene die het commando heeft verzonden. Het kan een speler of de console zijn.
CMD is het commando waarnaar je luistert, zoals aangegeven in plugin.yml. Niet te verwarren met label.
label is de alias die wordt gebruikt om deze opdracht uit te voeren, dit is wat de afzender na de schuine streep typt.
en ten slotte zijn args de argumenten die de afzender mogelijk heeft gebruikt om uw opdracht te verzenden.
Een mogelijk commando kan als gaan
/ vertel Kerooker Hallo, Kerooker!
Tell zou je label zijn en kan ook worden gedefinieerd als je opdracht als je dat zegt in plugin.yml;
'Kerooker', 'Hallo', 'Kerooker!' zijn jouw args respectievelijk 0, 1 en 2
Als terugkeer zul je waarschijnlijk altijd waar willen terugkeren als je verwachtte dat alles op die manier zou gebeuren. U moet false retourneren als u de afzender het opdrachtgebruik wilt laten zien dat in uw plugin.yml is gedefinieerd
Een eenvoudig ingesteld GameMode-commando (/ gm )
Dit voorbeeld toont een zeer eenvoudig voorbeeld van het gebruik van onCommand. Ik raad niet aan om je commando's rechtstreeks in onCommand te verwerken, maar dit is voldoende voor dit eenvoudige geval.
In dit voorbeeld proberen we de gamemodus van de speler in te stellen.
Het eerste wat we moeten doen, is ervoor zorgen dat de afzender geen ConsoleCommandSender is, omdat we de gamemodus van een console niet kunnen instellen. Dit wordt gedaan met (afzender van Player).
Vervolgens willen we dat de speler / gm CREATIVE (of welke andere gamemode dan ook) typt, dus we moeten 2 dingen controleren:
- zorg ervoor dat ze 1 argument doorgeven (CREATIEF)
- zorg ervoor dat hun commando "gm" was
We hebben deze controles uitgevoerd met: args.length == 1 && label.equalsIgnoreCase ("gm")
Nu weten we zeker dat de speler "/ gm x" heeft getypt.
Het volgende dat we moeten doen is args [0] in een GameMode-object veranderen, zodat we het op de speler kunnen toepassen. Dit kan worden gedaan met GameMode.valueOf (String) Echter, volgens de Java-opsommingsdocumentatie, als een string wordt doorgegeven aan valueOf () die niet overeenkomt met een opsomming, zal dit een IllegalArgumentException opleveren - dus we moeten ervoor zorgen dat vang dat.
Zodra we de gamemode hebben, kunnen we doorgaan en gewoon p.setGameMode (gm) gebruiken en de gamemode van de speler zal veranderen. In het geval dat we een uitzondering hebben opgemerkt, drukken we eenvoudig een verklaring af en sturen we false terug.
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
final Player p = (Player) sender;
if (args.length == 1 && label.equalsIgnoreCase("gm")) {
try {
GameMode gm = GameMode.valueOf(args[0]);
p.setGameMode(gm);
p.sendMessage(ChatColor.GREEN + "Your gamemode has been set to: " + gm.toString());
return true;
} catch (IllegalArgumentException e) {
p.sendMessage(ChatColor.RED + "Invalid gamemode option!");
return false;
}
}
}
return false;
}
Commando niet in hoofdklasse
Als je veel opdrachten hebt, moet je ze niet allemaal in de hoofdklasse plaatsen.
Maak een nieuwe klasse en laat deze
CommandExecutor
implementerenVoeg het volgende toe aan de klas:
@Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { }
Voeg in uw hoofdklasse onEnable toe (vervang commandName door de naam van de opdracht en CommandExecutor door de naam van de klasse):
getCommand("commandName").setExecutor(new CommandExecutor());