[GO] Akzeptieren Sie den Befehl [MineCraft Plugin] und lösen Sie ein Ereignis aus

Voraussetzungen

Wir werden das Plug-In entwickeln, indem wir es dem Plug-In hinzufügen, das in Erstellen eines Spigot-Plug-Ins mit Eclipse erstellt wurde.

SCHRITT 1: Implementierung grundlegender Befehle

Einstellungen für plugin.yml

Bearbeiten Sie plugin.yml, um die Funktion hinzuzufügen, mit der der Befehl des selbst erstellten Plug-Ins auf den Befehl reagiert.

command:
Befehlsname:
    description:Eine Übersicht über den Befehl finden Sie hier
    usage:Beschreibung der Befehlsverwendung

--description - Befehlsbeschreibung. --usage - Verwendung des Befehls. Wenn onCommand () hier false zurückgibt, wird diese Verwendung angezeigt.

Hier werden nur grundlegende Elemente hinzugefügt. Es ist möglich, mit verschiedenen Dingen zu spielen, indem andere als "Beschreibung" und "Verwendung" hinzugefügt werden. Wenn Sie weitere detaillierte Einstellungen vornehmen möchten, wählen Sie diese Site Wir verweisen auf E4% B8% 80% E8% A6% A7).

Ein Beispiel ist wie folgt.

name: "QiitaTest"
version: "${project.version}"
main: "com.github.kubota.qiitatest.QiitaTest"
api-version: "1.13"

commands: #Deklarieren Sie Befehle für Ihr eigenes Plugin
  qiita:
    description: this is a sample command.
    usage: /<command>

Hauptklasse bearbeiten

Fügen Sie der Hauptklasse die folgenden Elemente hinzu.

@Override
  public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    return false;
}

Hier finden Sie eine kurze Erläuterung der Methode "onCommand". Diese Methode wird ausgeführt, wenn der durch Command in plugin.yml definierte Befehl ausgeführt wird.

Es gibt vier Argumente, von denen jedes wie folgt lautet. --CommandSender Absender - Befehl Absender --Command cmd - Inhalt des ausgeführten Befehls --String commandLabel - Verwendeter Befehlsalias --String [] args - Ein Array mit Befehlsargumenten

Und da der Typ dieser Methode "Boolean" ist, ist der zurückgegebene Wert entweder "true" oder "false". Wenn es "wahr" ist, bedeutet dies, dass es normal funktioniert. Wenn es "falsch" ist, bedeutet dies, dass es nicht normal funktioniert hat und die unter "Verwendung" beschriebenen Inhalte angezeigt werden.

Wenn Sie diese Methode zu einem vorhandenen Programm hinzufügen, ist dies wie folgt.

package com.github.kubota.qiitatest;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;

public class QiitaTest extends JavaPlugin{
    //↓ onEnable ist eine Methode, die beim Laden ausgeführt wird
    @Override
    public void onEnable() {
        //↓ Hinterlassen Sie ein Protokoll auf dem Server
        getLogger().info("Hello, Qiita!");
    }

    //onCommand ist ein Plugin.Wird ausgeführt, wenn der in yml beschriebene Befehl aufgerufen wird
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    	return false;
    }
}

Wenn Sie dies tun, sieht es so aus: スクリーンショット 2019-08-13 23.45.28.png Wenn der Befehl "Qiita" ausgeführt wird, wird das Programm in der Methode "onCommand" ausgeführt und "false" zurückgegeben, sodass die in "Verwendung" in "plugin.yml" beschriebenen Inhalte angezeigt werden. Ich werde.

Fügen Sie die Methode "sendMessage" hinzu, da dies nur schwer zu verstehen ist. Diese Methode ist eine Member-Methode der CommandSender-Klasse. Die Funktion dieser Methode besteht darin, die Zeichenfolge im Argument als Nachricht an diese Zielperson (Benutzer der Instanz) zu senden. Der Unterschied zur im vorherigen Kapitel verwendeten Methode "getLogger" besteht darin, dass die Zeichenfolge auf der Konsole angezeigt und nur an die Zielperson gesendet wird.

Das Folgende ist die bearbeitete Version.

package com.github.kubota.qiitatest;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;

public class QiitaTest extends JavaPlugin{
    //↓ onEnable ist eine Methode, die beim Laden ausgeführt wird
    @Override
    public void onEnable() {
        //↓ Hinterlassen Sie ein Protokoll auf dem Server
        getLogger().info("Hello, Qiita!");
    }

    //onCommand ist ein Plugin.Wird ausgeführt, wenn der in yml beschriebene Befehl aufgerufen wird
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
        sender.sendMessage("Command, Qiita!");
    	return true;
    }
}

Aufgrund der Art der Methode "onCommand" ist das erste Argument, "sender", der Benutzer, der den Befehl ausgeführt hat. Daher wird in diesem Programm die Nachricht nur an den Benutzer gesendet, der den Befehl ausgeführt hat. Außerdem habe ich von "false" zu "true" gewechselt, um die Änderung des Verhaltens aufgrund des Rückgabewerts zu bestätigen.

Das Ausführungsergebnis ist wie folgt. スクリーンショット 2019-08-14 0.22.35.png

SCHRITT 2: Mehrere Befehle

Einstellungen für plugin.yml

Um mehrere Plug-Ins festzulegen, fügen Sie diese wie folgt unter "Befehl" hinzu. Es sieht aus wie das.

name: "QiitaTest"
version: "${project.version}"
main: "com.github.kubota.qiitatest.QiitaTest"
api-version: "1.13"

commands: #Deklarieren Sie Befehle für Ihr eigenes Plugin
  qiita:
    description: this is 1st sample command.
    usage: /<command>
  sample:
    description: this is 2nd sample command.
    usage: /<command>

Hauptklasse bearbeiten

onCommand ist eine Methode, die ausgeführt wird, wenn der in plugin.yml beschriebene Befehl aufgerufen wird. Wenn in plugin.yml mehrere Befehle definiert sind, werden sie ausgeführt, wenn einer von ihnen aufgerufen wird. Wenn Sie das vorhandene Programm beibehalten, führen alle Befehle denselben Vorgang aus, auch wenn Sie mehrere Befehle vorbereiten.

In diesem Fall ist es sinnlos, mehrere Befehle vorzubereiten. Daher muss der Prozess gemäß dem ausgeführten Befehl verzweigt werden.

package com.github.kubota.qiitatest;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;

public class QiitaTest extends JavaPlugin{
    //↓ onEnable ist eine Methode, die beim Laden ausgeführt wird
    @Override
    public void onEnable() {
        //↓ Hinterlassen Sie ein Protokoll auf dem Server
        getLogger().info("Hello, Qiita!");
    }

    //onCommand ist ein Plugin.Wird ausgeführt, wenn der in yml beschriebene Befehl aufgerufen wird
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
        if(cmd.getName().equalsIgnoreCase("qiita")){
            //Wird ausgeführt, wenn der Befehl qiita ausgeführt wird
            sender.sendMessage("Command, Qiita!");
            return true;
        }
        if(cmd.getName().equalsIgnoreCase("sample")){
            //Wird ausgeführt, wenn der Beispielbefehl ausgeführt wird
            sender.sendMessage("Command, sample!");
            return true;
        }
    	return false;
    }
}

Wie oben erwähnt, speichert cmd Informationen über den ausgeführten Befehl. Sie können den ausgeführten Befehl als Zeichenfolge abrufen, indem Sie die Methode "getName" dieser Instanz ausführen. equalsIgnoreCase -Methode Dies ist eine Methode vom Typ String, die als Boolescher Typ zurückgibt, ob die Argumentzeichenfolge mit der ausgeführten Zeichenfolge übereinstimmt.

Wenn dies ausgeführt wird, ist es wie folgt. スクリーンショット 2019-08-14 15.30.19.png

Tips

Die Methode wird zwangsweise beendet, ohne "return" und anschließende Verarbeitung auszuführen.

SCHRITT 3: Unterbefehl

Einstellungen für plugin.yml

Dies ist kein Muss, aber um Argumente als Funktion des Befehls qiita zu akzeptieren, ändern Sie die Verwendung, um das Verständnis wie folgt zu erleichtern.

name: "QiitaTest"
version: "${project.version}"
main: "com.github.kubota.qiitatest.QiitaTest"
api-version: "1.13"

commands: #Deklarieren Sie Befehle für Ihr eigenes Plugin
  qiita:
    description: this is 1st sample command.
    usage: /<command> [text]
  sample:
    description: this is 2nd sample command.
    usage: /<command>

Hauptklasse bearbeiten

Die Argumente beim Ausführen des Befehls werden in einer Variablen namens "args" gespeichert. Dies ist ein Array vom Typ String. Da es sich um ein Array handelt, können Sie es erhalten, indem Sie "args [x]" usw. eingeben. Der "x" -Teil beginnt bei 0 und wird um 1 erhöht.

> qiita a wa ka

Wenn Sie den Befehl ausführen

Streit args[0] args[1] args[2]
Wert "a" "wa" "ka"

Es wird so gespeichert.

Schreiben wir den folgenden Code damit.

package com.github.kubota.qiitatest;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;

public class QiitaTest extends JavaPlugin{
    //↓ onEnable ist eine Methode, die beim Laden ausgeführt wird
    @Override
    public void onEnable() {
        //↓ Hinterlassen Sie ein Protokoll auf dem Server
        getLogger().info("Hello, Qiita!");
    }

    //onCommand ist ein Plugin.Wird ausgeführt, wenn der in yml beschriebene Befehl aufgerufen wird
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    	if(cmd.getName().equalsIgnoreCase("qiita")) {
    		if(args.length == 0)return false;
    		sender.sendMessage("Command, Qiita by " + args[0]);
    		return true;
    	}
    	if(cmd.getName().equalsIgnoreCase("sample")) {
    		sender.sendMessage("Command, Sample");
    		return true;
    	}
    	return false;
    }
}

args.length enthält die Anzahl der Elemente, die im Array von args gespeichert sind. Wenn es 0 ist, bedeutet dies, dass bei der Ausführung des Befehls kein Argument eingegeben wurde. Diesmal ist ein solcher Status nicht geeignet, daher gibt die Methode "onCommand" "false" zurück.

Wenn die Bedingung überschritten wird (wenn ein Argument vorhanden ist), wird die als erstes Argument eingegebene Zeichenfolge angezeigt, nachdem die Meldung "Befehl, Qiita von" angezeigt wird. Wenn dies ausgeführt wird, ist das Ergebnis wie folgt. スクリーンショット 2019-08-14 17.21.11.png

Das wars für diese Zeit!

SCHRITT 4: Beispiel-Plug-In (Janken)

Erstellen Sie abschließend ein Beispiel-Plug-In mit diesem Wissen.

Als Funktion ist es ein Programm, das einen Computer spielt. Die Hand des Gegners wird als zufällige Hand bestimmt, wenn das Plug-In aktiviert wird, und ändert sich danach nicht mehr.

Die durch Befehle implementierten Funktionen sind

»Mach Janken --Überprüfe die Hand des Gegners

Es gibt zwei.

plugin.yml

name: "QiitaTest"
version: "${project.version}"
main: "com.github.kubota.qiitatest.QiitaTest"
api-version: "1.13"

commands: #Deklarieren Sie Befehle für Ihr eigenes Plugin
  janken:
    discription: play the game of scissors-paper-roc.
    usage: /<command> [your choice]
  enemy:
    discription: check enemy choice.
    usage: /<command>
    

Funktion des Befehls des zu implementierenden Plug-Ins

Befehl Funktion
/janken [Hand zum Löschen] Mach Janken
/enemy Überprüfen Sie die Hand des Gegners

Hauptklasse

package com.github.kubota.qiitatest;

//Bibliothek zur Zufallszahlengenerierung
import java.util.Random;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;

public class QiitaTest extends JavaPlugin{
	String enemy = "";

	//onEnable ist die Methode, die beim Laden ausgeführt wird
	//Bei dieser Methode Feind(Hand des Gegners)Nach dem Zufallsprinzip bestimmen
	@Override
	public void onEnable() {
		//Sequenz mit Handinformationen
		String[] hand = {"goo","tyo","paa"};

		//Instantulieren Sie eine Klasse für die Zufallszahlengenerierung
		Random r = new Random();
		//Generieren Sie mit der nextInt-Methode eine Zufallszahl zwischen 0 und 3,Bewahren Sie die entsprechende Hand im Feind auf
		enemy = hand[r.nextInt(3)];
	}


    //onCommand ist ein Plugin.Wird ausgeführt, wenn der in yml beschriebene Befehl aufgerufen wird
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {

    	//Spielen Sie das Spiel mit dem Feind, indem Sie den Befehl janken ausführen
    	//Geben Sie Ihre Hand als Argument ein
    	if(cmd.getName().equalsIgnoreCase("janken")) {

    		//Es wurden keine Argumente übergeben
    		if(args.length == 0)return false;

    		if(args[0].equalsIgnoreCase("paa") && enemy.equalsIgnoreCase("tyo") ||
    			args[0].equalsIgnoreCase("tyo") && enemy.equalsIgnoreCase("goo") ||
    			args[0].equalsIgnoreCase("goo") && enemy.equalsIgnoreCase("paa")){
    			//Muster besiegen
    			sender.sendMessage("Mein Gewinn!Überlegen Sie, warum Sie bis morgen verloren haben");

    		}else if(args[0].equalsIgnoreCase("tyo") && enemy.equalsIgnoreCase("paa") ||
    			args[0].equalsIgnoreCase("goo") && enemy.equalsIgnoreCase("tyo") ||
        		args[0].equalsIgnoreCase("paa") && enemy.equalsIgnoreCase("goo")) {
    			//Siegesmuster
    			sender.sendMessage("Tu es!Lass mich morgen rächen");

    		}else if(args[0].equalsIgnoreCase(enemy)) {
    			//Aiko Muster
    			sender.sendMessage("Aikoyan!Was ist das?");

    		}else {
    			//Andere Muster als goo tyo paa
    			return false;
    		}
    		return true;
    	}

    	//Zeigen Sie die Hand des Gegners mit dem feindlichen Befehl an
    	if(cmd.getName().equalsIgnoreCase("enemy")) {
    		sender.sendMessage("Enemy choice is " + enemy + ".");
    		return true;
    	}

    	return false;
    }
}

Zufällige Generierung

//Bibliothek zur Zufallszahlengenerierung
import java.util.Random;

Durch Importieren dieser Bibliothek können Sie die unten verwendeten Klassen verwenden, um Zufallszahlen zu generieren.

//Variabel, um die Hand des Gegners zu speichern
String enemy = "";

//onEnable ist die Methode, die beim Laden ausgeführt wird
//Bei dieser Methode Feind(Hand des Gegners)Nach dem Zufallsprinzip bestimmen
@Override
public void onEnable() {
	//Sequenz mit Handinformationen
	String[] hand = {"goo","tyo","paa"};

	//Instantulieren Sie eine Klasse für die Zufallszahlengenerierung
	Random r = new Random();
	//Generieren Sie mit der nextInt-Methode eine Zufallszahl zwischen 0 und 3,Bewahren Sie die entsprechende Hand im Feind auf
	enemy = hand[r.nextInt(3)];
}

Dies ist ein Programm, das zufällig die Hand des Gegners bestimmt. Bereiten Sie zunächst "Feind", eine Variable, die die Hand des Gegners speichert, als Feld der Hauptklasse vor.

Danach wird eine Instanz der Random-Klasse als Prozess initialisiert, wenn dieses Programm wirksam wird. Dies ermöglicht die Verwendung einer Methode zum Generieren von Zufallszahlen über diese Instanz. Rufen Sie als nächstes die Methode nectInt auf, um eine Zufallszahl zu erhalten. Das Argument dieser Methode ist der Maximalwert der generierten Zufallszahl. Dieses Programm generiert Zufallszahlen von 0 oder mehr und weniger als 3.

Indem dies als Index des Arrays verwendet wird, ist es möglich, zufällig eines der drei Elemente von 0 bis 2 zu erhalten, dh das "Hand" -Array.

Mach Janken

//Spielen Sie das Spiel mit dem Feind, indem Sie den Befehl janken ausführen
    //Geben Sie Ihre Hand als Argument ein
    if(cmd.getName().equalsIgnoreCase("janken")) {

    	//Es wurden keine Argumente übergeben
    	if(args.length == 0)return false;

    	if(args[0].equalsIgnoreCase("paa") && enemy.equalsIgnoreCase("tyo") ||
    		args[0].equalsIgnoreCase("tyo") && enemy.equalsIgnoreCase("goo") ||
    		args[0].equalsIgnoreCase("goo") && enemy.equalsIgnoreCase("paa")){
    		//Muster besiegen
    		sender.sendMessage("Mein Gewinn!Überlegen Sie, warum Sie bis morgen verloren haben");

    	}else if(args[0].equalsIgnoreCase("tyo") && enemy.equalsIgnoreCase("paa") ||
    		args[0].equalsIgnoreCase("goo") && enemy.equalsIgnoreCase("tyo") ||
        	args[0].equalsIgnoreCase("paa") && enemy.equalsIgnoreCase("goo")) {
    		//Siegesmuster
    		sender.sendMessage("Tu es!Lass mich morgen rächen");

    	}else if(args[0].equalsIgnoreCase(enemy)) {
    		//Aiko Muster
    		sender.sendMessage("Aikoyan!Was ist das?");

    	}else {
    		//Andere Muster als goo tyo paa
    		return false;
    	}
    	return true;
}

Und der nächste scheint auf den ersten Blick sehr schwierig zu sein, aber der Inhalt ist einfach, weil der bedingte Ausdruck kompliziert ist. Das Gewinnmuster und das Verlustmuster werden alle nacheinander definiert (nur Aiko beurteilt, dass "Feind" und "Argumente" gleich sind).

Zeige die Hand des Gegners

//Zeigen Sie die Hand des Gegners mit dem feindlichen Befehl an
if(cmd.getName().equalsIgnoreCase("enemy")) {
	sender.sendMessage("Enemy choice is " + enemy + ".");
	return true;
}

Es wird nur "Feind" angezeigt. Ich glaube nicht, dass es besondere Schwierigkeiten gibt.

Ausführungsergebnis

スクリーンショット 2019-08-14 20.11.54.png

Verweise

Recommended Posts

Akzeptieren Sie den Befehl [MineCraft Plugin] und lösen Sie ein Ereignis aus
Gewähren Sie mit dem Befehl curl ein Zugriffstoken und POSTEN Sie die API
Sphinx-Schnellstart wurde zu einem Problem und ich versuchte, einen alternativen Befehl zu erstellen, und der Stress verschwand