-Normalement, la commande à enregistrer dans plugin.yml est enregistrée en tant que commande vanilla.
・ L'environnement de développement de plug-ins est en place.
・ Windows 10 à 1909 -Version de l'EDI Eclipse: 2020-06 (4.16.0) ・ Minecraft 1.16.1 ・ Robinet 1.16.1
Cela utilise le brigadier du moteur de commande ajouté à partir de Minecraft 1.13, donc cela peut ne pas être possible avec les versions inférieures à 1.13.
-Cette fois, nous allons créer en toute sécurité une commande pour "faire voler le joueur".
-Syntaxe de commande
/fly <joueur> allow
・ Commençons par créer une classe.
FlyCommand.java
package com.hamusuke.qiita.command;
import java.util.Collection;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import net.minecraft.server.v1_16_R1.ArgumentEntity;
import net.minecraft.server.v1_16_R1.ChatMessage;
import net.minecraft.server.v1_16_R1.CommandListenerWrapper;
import net.minecraft.server.v1_16_R1.EntityPlayer;
public class FlyCommand {
public static void register(CommandDispatcher<CommandListenerWrapper> dispatcher) {
LiteralArgumentBuilder<CommandListenerWrapper> literalArgumentBuilder = net.minecraft.server.v1_16_R1.CommandDispatcher.a("fly").requires((permission) -> {
return permission.hasPermission(2);
}).then(net.minecraft.server.v1_16_R1.CommandDispatcher.a("target", ArgumentEntity.d()).then(net.minecraft.server.v1_16_R1.CommandDispatcher.a("allow").executes((commandcontext) -> {
return execute(commandcontext.getSource(), ArgumentEntity.f(commandcontext, "target"));
})));
dispatcher.register(literalArgumentBuilder);
}
private static int execute(CommandListenerWrapper commandListenerWrapper, Collection<EntityPlayer> players) {
for(EntityPlayer entityPlayer : players) {
entityPlayer.abilities.canFly = true;
entityPlayer.updateAbilities();
}
if(players.size() == 1) {
commandListenerWrapper.sendMessage(new ChatMessage("%Fait s flyable", new Object[] {players.iterator().next().getScoreboardDisplayName()}), true);
}else {
commandListenerWrapper.sendMessage(new ChatMessage("%Fait voler les joueurs", new Object[] {players.size()}), true);
}
return players.size();
}
}
public static void register(CommandDispatcher<CommandListenerWrapper> dispatcher) {
-Créer une méthode pour l'enregistrement des commandes.
-CommandDispatcher
est pour com.mojang.brigadier.CommandDispatcher
LiteralArgumentBuilder<CommandListenerWrapper> literalArgumentBuilder = net.minecraft.server.v1_16_R1.CommandDispatcher.a("fly").requires((permission) -> {
return permission.hasPermission(2);
}).then(net.minecraft.server.v1_16_R1.CommandDispatcher.a("target", ArgumentEntity.d()).then(net.minecraft.server.v1_16_R1.CommandDispatcher.a("allow").executes((commandcontext) -> {
return execute(commandcontext.getSource(), ArgumentEntity.f(commandcontext, "target"));
})));
・ Net.minecraft.server.v1_16_R1.CommandDispatcher.a (" voler ")
C'est la partie / fly.
・ Nécessite ((permission) -> { return permission.hasPermission(2); });
Spécifie le niveau de privilège auquel la commande peut être exécutée. Si «2» est spécifié, seuls les joueurs avec des privilèges d'administrateur peuvent l'exécuter.
・ Puis (net.minecraft.server.v1_16_R1.CommandDispatcher.a (" target ", ArgumentEntity.d ()). Then (net.minecraft.server.v1_16_R1.CommandDispatcher.a (" allow "))
La syntaxe après / fly
ʻArgumentEntity.d () `est utilisé lorsque vous souhaitez spécifier uniquement le lecteur. Si vous spécifiez une entité telle que @e, vous obtiendrez une erreur comme celle-ci.
executes((commandcontext) -> {
return execute(commandcontext.getSource(), ArgumentEntity.f(commandcontext, "target"));
})
CommandListenerWrapper
avec getSource ()
.
-Vous pouvez obtenir Collection <EntityPlayer>
avec ʻArgumentEntity.f (commandcontext, "target") `.dispatcher.register(literalArgumentBuilder);
-La syntaxe de la commande est enregistrée.
for(EntityPlayer entityPlayer : players) {
entityPlayer.abilities.canFly = true;
entityPlayer.updateAbilities();
}
-Vous pouvez voler avec ʻentityPlayer.abilities.canFly = true. · ʻEntityPlayer.updateAbilities ()
envoie au serveur que les capacités du joueur (entityPlayer.abilities)
ont changé. N'oubliez pas de l'inclure lorsque vous apportez des modifications.
if(players.size() == 1) {
commandListenerWrapper.sendMessage(new ChatMessage("%Fait s flyable", new Object[] {players.iterator().next().getScoreboardDisplayName()}), true);
}else {
commandListenerWrapper.sendMessage(new ChatMessage("%Fait voler les joueurs", new Object[] {players.size()}), true);
}
· CommandListenerWrapper.sendMessage ()
envoie un message à l'expéditeur de la commande.
-Si vous utilisez getScoreboardDisplayName ()
, les informations seront affichées lorsque vous déplacez le curseur de cette manière.
-Si true
est spécifié, il sera envoyé aux autres joueurs et aux journaux du serveur.
-Si false
est spécifié, seul l'expéditeur de la commande sera envoyé.
Main.java
package com.hamusuke.qiita;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_16_R1.CraftServer;
import org.bukkit.plugin.java.JavaPlugin;
import com.hamusuke.qiita.command.FlyCommand;
import com.mojang.brigadier.CommandDispatcher;
import net.minecraft.server.v1_16_R1.CommandListenerWrapper;
import net.minecraft.server.v1_16_R1.DedicatedServer;
public class Main extends JavaPlugin {
@Override
public void onEnable() {
DedicatedServer dedicatedServer = ((CraftServer)Bukkit.getServer()).getServer();
CommandDispatcher<CommandListenerWrapper> dispatcher = dedicatedServer.vanillaCommandDispatcher.a();
FlyCommand.register(dispatcher);
getLogger().info("registered fly command");
}
}
-OnEnable () est appelé lorsque le plug-in est chargé, alors enregistrez la commande ici.
Je me suis inscrit fermement. Tu peux voler.
Puisqu'il est enregistré en tant que commande vanilla, ce sera / minecraft: fly
. (minecraft: peut être omis)
-Fonctionne de la même manière que la commande vanilla. -Il n'est pas nécessaire de le décrire dans plugin.yml. -Il n'est pas nécessaire de créer une classe pour l'achèvement des tabulations.
-Le code a tendance à être long. (Difficile de voir)
Merci d'avoir lu l'article. C'est la première fois que j'écris un article, donc cela peut avoir été difficile à comprendre.