Nous développerons le plug-in en l'ajoutant au plug-in créé dans Creating a Spigot plug-in using Eclipse.
Modifiez plugin.yml
pour ajouter la fonction que la commande du plug-in créé par vous-même répond à la commande.
command:
Nom de la commande:
description:Un aperçu de la commande est donné ici
usage:Description de l'utilisation de la commande
--description - Description de la commande. --usage - Comment utiliser la commande Si onCommand () renvoie false ici, cette utilisation sera affichée.
Seuls les éléments de base sont ajoutés ici. Il est possible de jouer avec diverses choses en ajoutant autre que «description» et «utilisation». Si vous souhaitez définir d'autres paramètres détaillés, [ce site](https://mcmodding.jp/modding/index.php/Plugin.yml%E3%81%AE%E8%A8%AD%E5%AE%9A% Veuillez vous référer à E4% B8% 80% E8% A6% A7).
Un exemple est le suivant.
name: "QiitaTest"
version: "${project.version}"
main: "com.github.kubota.qiitatest.QiitaTest"
api-version: "1.13"
commands: #Déclarez des commandes pour votre propre plugin
qiita:
description: this is a sample command.
usage: /<command>
Ajoutez les éléments suivants à la classe principale.
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
return false;
}
Voici une brève description de la méthode ʻonCommand. Cette méthode est exécutée lorsque la commande définie par
Command dans
plugin.yml` est exécutée.
Il y a quatre arguments, dont chacun est le suivant. --CommandSender sender - Expéditeur de la commande --Command cmd - Contenu de la commande exécutée --String commandLabel - Alias de commande utilisé --String [] args - Un tableau contenant des arguments de commande
Et comme le type de cette méthode est «Boolean», la valeur renvoyée est soit «true» soit «false». Si c'est "vrai", cela signifie que cela fonctionne normalement. S'il est «faux», cela signifie qu'il n'a pas fonctionné normalement, et le contenu décrit dans «utilisation» s'affiche.
Si vous ajoutez cette méthode à un programme existant, ce sera comme suit.
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 est une méthode qui est exécutée lorsqu'elle est chargée
@Override
public void onEnable() {
//↓ Laisser un journal sur le serveur
getLogger().info("Hello, Qiita!");
}
//onCommand est un plugin.Exécuté lorsque la commande décrite dans yml est appelée
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
return false;
}
}
Lorsque vous faites cela, cela ressemble à ceci:
Lorsque la commande Qiita
est exécutée, le programme de la méthode ʻonCommand est exécuté et
false est renvoyé, ainsi le contenu décrit dans ʻUsage
dans plugin.yml
est affiché. Je vais.
Comme il est difficile de comprendre avec cela, ajoutez la méthode sendMessage
.
Cette méthode est une méthode membre de la classe CommandSender
.
La fonction de cette méthode est d'envoyer la chaîne de caractères de l'argument sous forme de message à cette personne cible (utilisateur de l'instance).
La différence avec la méthode getLogger
utilisée dans le chapitre précédent est qu'elle affiche la chaîne de caractères sur la console et n'envoie la chaîne de caractères qu'à la personne cible.
Ce qui suit est la version modifiée.
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 est une méthode qui est exécutée lorsqu'elle est chargée
@Override
public void onEnable() {
//↓ Laisser un journal sur le serveur
getLogger().info("Hello, Qiita!");
}
//onCommand est un plugin.Exécuté lorsque la commande décrite dans yml est appelée
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
sender.sendMessage("Command, Qiita!");
return true;
}
}
En raison de la nature de la méthode ʻonCommand, son premier argument,
sender`, est l'utilisateur qui a exécuté la commande.
Par conséquent, dans ce programme, le message est envoyé uniquement à l'utilisateur qui a exécuté la commande.
De plus, j'ai changé de «false» à «true» pour confirmer le changement de comportement dû à la valeur de retour.
Le résultat de l'exécution est le suivant.
Pour définir plusieurs plug-ins, ajoutez-les sous Commande
comme suit.
Ça ressemble à ça.
name: "QiitaTest"
version: "${project.version}"
main: "com.github.kubota.qiitatest.QiitaTest"
api-version: "1.13"
commands: #Déclarez des commandes pour votre propre plugin
qiita:
description: this is 1st sample command.
usage: /<command>
sample:
description: this is 2nd sample command.
usage: /<command>
ʻOnCommand est une méthode qui est exécutée lorsque la commande décrite dans
plugin.ymlest appelée. Si plusieurs commandes sont définies dans
plugin.yml`, elles seront exécutées si l'une d'elles est appelée.
Si vous conservez le programme existant, même si vous préparez plusieurs commandes, elles effectueront toutes la même opération.
Dans ce cas, il est inutile de préparer plusieurs commandes, il est donc nécessaire de brancher le processus en fonction de la commande exécutée.
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 est une méthode qui est exécutée lorsqu'elle est chargée
@Override
public void onEnable() {
//↓ Laisser un journal sur le serveur
getLogger().info("Hello, Qiita!");
}
//onCommand est un plugin.Exécuté lorsque la commande décrite dans yml est appelée
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if(cmd.getName().equalsIgnoreCase("qiita")){
//Exécuté lorsque la commande qiita est exécutée
sender.sendMessage("Command, Qiita!");
return true;
}
if(cmd.getName().equalsIgnoreCase("sample")){
//Exécuté lorsque la commande exemple est exécutée
sender.sendMessage("Command, sample!");
return true;
}
return false;
}
}
Comme mentionné ci-dessus, cmd stocke des informations sur la commande exécutée.
Vous pouvez obtenir la commande exécutée sous forme de chaîne de caractères en exécutant la méthode getName
de cette instance.
Méthode ʻEqualsIgnoreCase` Il s'agit d'une méthode du type String qui renvoie comme type booléen si la chaîne d'argument correspond à la chaîne exécutée.
Quand ceci est exécuté, ce sera comme suit.
Tips
La méthode est arrêtée de force sans exécuter
return
et le traitement ultérieur.
Ce n'est pas un must, mais pour lui faire accepter des arguments en fonction de la commande qiita, changez ʻusage` comme suit.
name: "QiitaTest"
version: "${project.version}"
main: "com.github.kubota.qiitatest.QiitaTest"
api-version: "1.13"
commands: #Déclarez des commandes pour votre propre plugin
qiita:
description: this is 1st sample command.
usage: /<command> [text]
sample:
description: this is 2nd sample command.
usage: /<command>
Les arguments lors de l'exécution d'une commande sont stockés dans une variable appelée «args». Il s'agit d'un tableau de type String.
Puisqu'il s'agit d'un tableau, vous pouvez l'obtenir en tapant ʻargs [x] , etc. La partie
x` commence à 0 et s'incrémente de 1.
> qiita a wa ka
Si vous exécutez la commande
argument | args[0] | args[1] | args[2] |
---|---|---|---|
valeur | "a" | "wa" | "ka" |
Il est stocké comme ça.
Écrivons le code suivant en utilisant ceci.
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 est une méthode qui est exécutée lors de son chargement
@Override
public void onEnable() {
//↓ Laisser un journal sur le serveur
getLogger().info("Hello, Qiita!");
}
//onCommand est un plugin.Exécuté lorsque la commande décrite dans yml est appelée
@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 contient le nombre d'éléments stockés dans le tableau de ʻargs
.
S'il vaut 0, cela signifie qu'aucun argument n'a été entré lors de l'exécution de la commande.
Cette fois, un tel état n'est pas approprié, donc la méthode ʻonCommand renvoie
false`.
Si la condition est dépassée (si un argument existe), la chaîne de caractères saisie comme premier argument est affichée après l'affichage du message «Command, Qiita by». Lorsque ceci est exécuté, le résultat sera le suivant.
Voilà pour cette fois!
Enfin, créez un exemple de plug-in en utilisant ces connaissances.
En tant que fonction, c'est un programme qui joue un ordinateur. La main de l'adversaire est déterminée comme étant une main aléatoire lorsque le plug-in est activé, et ne changera pas après cela.
Les fonctions implémentées par les commandes sont
――Do Janken
Il y en a deux.
plugin.yml
name: "QiitaTest"
version: "${project.version}"
main: "com.github.kubota.qiitatest.QiitaTest"
api-version: "1.13"
commands: #Déclarez des commandes pour votre propre plugin
janken:
discription: play the game of scissors-paper-roc.
usage: /<command> [your choice]
enemy:
discription: check enemy choice.
usage: /<command>
Fonction de la commande du plug-in à implémenter
commander | une fonction |
---|---|
/janken [Main à sortir] |
Do Janken |
/enemy |
Vérifiez la main de l'adversaire |
package com.github.kubota.qiitatest;
//Bibliothèque pour la génération de nombres aléatoires
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 est la méthode qui sera exécutée lors de son chargement
//Dans cette méthode ennemi(La main de l'adversaire)Déterminer aléatoirement
@Override
public void onEnable() {
//Séquence avec informations sur la main
String[] hand = {"goo","tyo","paa"};
//Instancier une classe pour la génération de nombres aléatoires
Random r = new Random();
//Générer un nombre aléatoire entre 0 et 3 avec la méthode nextInt,Stockez la main correspondante dans l'ennemi
enemy = hand[r.nextInt(3)];
}
//onCommand est un plugin.Exécuté lorsque la commande décrite dans yml est appelée
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
//Jouez au jeu avec l'ennemi en exécutant la commande janken
//Entrez votre main comme argument
if(cmd.getName().equalsIgnoreCase("janken")) {
//Aucun argument passé
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")){
//Modèle de défaite
sender.sendMessage("Ma victoire!Pense à pourquoi tu as perdu jusqu'à demain");
}else if(args[0].equalsIgnoreCase("tyo") && enemy.equalsIgnoreCase("paa") ||
args[0].equalsIgnoreCase("goo") && enemy.equalsIgnoreCase("tyo") ||
args[0].equalsIgnoreCase("paa") && enemy.equalsIgnoreCase("goo")) {
//Modèle de victoire
sender.sendMessage("Fais le!Laisse-moi me venger demain");
}else if(args[0].equalsIgnoreCase(enemy)) {
//Motif Aiko
sender.sendMessage("Aikoyan!Qu'est-ce que c'est ça?");
}else {
//Modèles autres que goo tyo paa
return false;
}
return true;
}
//Afficher la main de l'adversaire avec le commandement ennemi
if(cmd.getName().equalsIgnoreCase("enemy")) {
sender.sendMessage("Enemy choice is " + enemy + ".");
return true;
}
return false;
}
}
//Bibliothèque pour la génération de nombres aléatoires
import java.util.Random;
En important cette bibliothèque, vous pouvez utiliser les classes utilisées ci-dessous pour générer des nombres aléatoires.
//Variable pour stocker la main de l'adversaire
String enemy = "";
//onEnable est la méthode qui sera exécutée lors de son chargement
//Dans cette méthode ennemi(La main de l'adversaire)Déterminer aléatoirement
@Override
public void onEnable() {
//Séquence avec informations sur la main
String[] hand = {"goo","tyo","paa"};
//Instancier une classe pour la génération de nombres aléatoires
Random r = new Random();
//Générer un nombre aléatoire entre 0 et 3 avec la méthode nextInt,Stockez la main correspondante dans l'ennemi
enemy = hand[r.nextInt(3)];
}
C'est un programme qui détermine aléatoirement la main de l'adversaire. Tout d'abord, préparez ʻenmy`, qui est une variable qui stocke la main de l'adversaire, comme un champ de la classe principale.
Après cela, une instance de la classe Random
est initialisée en tant que processus lorsque ce programme devient effectif.
Cela permet d'utiliser une méthode pour générer des nombres aléatoires via cette instance.
Ensuite, appelez la méthode nectInt
pour obtenir un nombre aléatoire. L'argument de cette méthode est la valeur maximale du nombre aléatoire généré.
Ce programme génère des nombres aléatoires de 0 ou plus et de moins de 3.
En utilisant ceci comme indice du tableau, il est possible d'en obtenir aléatoirement un parmi les trois éléments de 0 à 2, c'est-à-dire le tableau «main».
//Jouez au jeu avec l'ennemi en exécutant la commande janken
//Entrez votre main comme argument
if(cmd.getName().equalsIgnoreCase("janken")) {
//Aucun argument passé
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")){
//Modèle de défaite
sender.sendMessage("Ma victoire!Pense à pourquoi tu as perdu jusqu'à demain");
}else if(args[0].equalsIgnoreCase("tyo") && enemy.equalsIgnoreCase("paa") ||
args[0].equalsIgnoreCase("goo") && enemy.equalsIgnoreCase("tyo") ||
args[0].equalsIgnoreCase("paa") && enemy.equalsIgnoreCase("goo")) {
//Modèle de victoire
sender.sendMessage("Fais le!Laisse-moi me venger demain");
}else if(args[0].equalsIgnoreCase(enemy)) {
//Motif Aiko
sender.sendMessage("Aikoyan!Qu'est-ce que c'est ça?");
}else {
//Modèles autres que goo tyo paa
return false;
}
return true;
}
Et le suivant semble être très difficile à première vue, mais le contenu est simple car l'expression conditionnelle est compliquée. Le modèle gagnant et le modèle perdant sont tous définis un par un (seuls les juges Aiko qui «ennemi» et «args [0]» sont égaux).
//Afficher la main de l'adversaire avec le commandement ennemi
if(cmd.getName().equalsIgnoreCase("enemy")) {
sender.sendMessage("Enemy choice is " + enemy + ".");
return true;
}
Il affiche simplement «ennemi». Je ne pense pas qu'il y ait de difficulté particulière.