Pluginutveckling – Skapa ett kommando

Detta är del 2 av guiden som är till för dig som vill börja utveckla plugins för Spigot. I denna del ska vi skapa ett simpelt kommando som skriver ”Hello Spelarnamn” till spelaren som skriver kommandot /hello på test-servern.

Steg 1. Skapa klassen som kör kommandot.

  1. Högerklicka på paketet där Main-klassen ligger och skapa en ny klass som heter ”CommandHandler”. (Namnet är valfritt och kan även vara t.ex ”HelloCommand”)
  2. Inne i klassen, så bör du nu implementera ”CommandExecutor” som är ett interface som används för att köra kommandon.
  3. Välj ”Implement methods” i den röda glödlampan, eller tryck alt+enter för att öppna menyn, och välj ”Implement methods”. Tyck sedan OK.

 

 

 

 

 

 

 

4. Döp om ”commandSender” till ”sender” och ”strings” till ”args” för att lättare kunna använda dessa variabler i kommandot. Ändra även ”return false” till ”return true”.

Koden bör nu ser ut såhär:

package eu.mineworlds.plugin;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

public class CommandHandler implements CommandExecutor
{
    @Override
    public boolean onCommand(CommandSender sender, Command command, String s, String[] args)
    {
        return true;
    }
}

CommandSender är det objekt som skickas av servern när någon skriver ett kommando, till exempel /hello . Vanligtvis finns det två typer av sätt ett kommando kan skickas, antingen av en spelare inne i spelet eller från serverterminalen. Om du vill kolla om sändaren är en spelare, så kan du t.ex göra följande kod:

if (sender instanceof Player)
{
    //Sändaren är en Spelare
} else
{
    //Sändaren är något annat, t.ex server-terminalen
}

Sändaren har dock alltid ett namn, så i detta fall så behöver vi inte göra den här kontrollen. Vi vill skicka tillbaka ”Hello Spelarnamn” till sändaren när de skriver kommandot i antingen chatten eller server-terminalen.

Detta kan göras via

sender.sendMessage("Meddelande");

Vi lägger alltså till detta i onCommand-metoden, innan return true;. För att lägga till sändarens namn kan vi göra:

sender.sendMessage("Hello " + sender.getName());

Nu är kommandoklassen färdig!

Steg 2. Registrera kommandot i plugin.yml

  1. Lägg till kommandot i slutet av din plugin.yml-fil:
commands: 
  hello:
    description: Skickar hello
    usage: /hello

Detta innebär att servern registrerar att kommandot existerar när pluginet laddas in. ”description” innehåller en kort info-sträng om vad kommandot gör, och ”usage” innehåller bara information om hur man ska använda kommandot, syntaxmässigt. Läs mer om detta i dokumentationen för plugin.yml

Steg 3. Registrera kommandot i Main-klassen.

Lägg till detta i din onEnable()-metod:

getCommand("hello").setExecutor(new CommandHandler());

Metoden ska nu se ut såhär:

@Override
public void onEnable()
{
    getServer().getLogger().log(Level.INFO, "Hello World!");
    getCommand("hello").setExecutor(new CommandHandler());
}

Steg 4. Testa kommandot.

Nu kan du logga in på test-servern och skriva /hello i chatten, eller skriva kommandot i terminalen. Fungerar det som det ska bör det nu stå ”Hello Spelarnamn”.