・ Die Umgebung für die Plug-In-Entwicklung ist vorhanden.
・ Windows 10 - 1909 -Eclipse IDE Version: 2020-06 (4.16.0) ・ Minecraft 1.16.1 ・ Zapfen 1.16.1
Hierbei wird der aus Minecraft 1.13 hinzugefügte Befehlsmodul-Brigadier verwendet, sodass dies bei Versionen unter 1.13 möglicherweise nicht möglich ist.
-Dieses Mal werden wir sicher einen Befehl erstellen, um "den Spieler zum Fliegen zu bringen".
-Befehlssyntax
/fly <Spieler> allow
・ Erstellen wir zunächst eine Klasse.
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("%S fliegbar gemacht", new Object[] {players.iterator().next().getScoreboardDisplayName()}), true);
}else {
commandListenerWrapper.sendMessage(new ChatMessage("%S Spieler flugfähig gemacht", new Object[] {players.size()}), true);
}
return players.size();
}
}
public static void register(CommandDispatcher<CommandListenerWrapper> dispatcher) {
-Erstellen Sie eine Methode zur Befehlsregistrierung.
-CommandDispatcher
ist für 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 Net.minecraft.server.v1_16_R1.CommandDispatcher.a (" fly ")
Dies ist der / fly Teil.
・ Benötigt ((Erlaubnis) -> { return permission.hasPermission(2); });
Gibt die Berechtigungsstufe an, auf der der Befehl ausgeführt werden kann. Wenn "2" angegeben ist, können nur Spieler mit Administratorrechten es ausführen.
Then Dann (net.minecraft.server.v1_16_R1.CommandDispatcher.a (" target ", ArgumentEntity.d ()). Then (net.minecraft.server.v1_16_R1.CommandDispatcher.a (" allow "))
Die Syntax nach / fly
ArgumentEntity.d ()
wird verwendet, wenn Sie nur den Player angeben möchten. Wenn Sie eine Entität wie @e angeben, wird eine solche Fehlermeldung angezeigt.
executes((commandcontext) -> {
return execute(commandcontext.getSource(), ArgumentEntity.f(commandcontext, "target"));
})
CommandListenerWrapper
mit getSource ()
erhalten.
-Sie können Collection <EntityPlayer>
mit ArgumentEntity.f (Befehlskontext," Ziel ")
erhalten.dispatcher.register(literalArgumentBuilder);
-Die Syntax des Befehls ist registriert.
for(EntityPlayer entityPlayer : players) {
entityPlayer.abilities.canFly = true;
entityPlayer.updateAbilities();
}
-Sie können es mit "entityPlayer.abilities.canFly = true" flugfähig machen.
· EntityPlayer.updateAbilities ()
sendet an den Server, dass sich die Fähigkeiten des Spielers(entityPlayer.abilities)
geändert haben. Stellen Sie sicher, dass Sie dies berücksichtigen, wenn Sie Änderungen vornehmen.
if(players.size() == 1) {
commandListenerWrapper.sendMessage(new ChatMessage("%S fliegbar gemacht", new Object[] {players.iterator().next().getScoreboardDisplayName()}), true);
}else {
commandListenerWrapper.sendMessage(new ChatMessage("%S Spieler flugfähig gemacht", new Object[] {players.size()}), true);
}
· CommandListenerWrapper.sendMessage ()
sendet eine Nachricht an den Befehlsabsender.
-Wenn Sie "getScoreboardDisplayName ()" verwenden, werden die Informationen angezeigt, wenn Sie den Cursor auf diese Weise bewegen.
-Wenn "true" angegeben ist, wird es an andere Spieler und Serverprotokolle gesendet.
-Wenn "false" angegeben ist, wird nur der Absender des Befehls gesendet.
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 () wird aufgerufen, wenn das Plug-In geladen wird. Registrieren Sie den Befehl hier.
Ich habe mich fest angemeldet. Du kannst fliegen.
Da es als Vanille-Befehl registriert ist, wird es "/ minecraft: fly" sein. (Minecraft: kann weggelassen werden)
-Funktionen wie der Vanille-Befehl. -Es ist nicht notwendig, es in plugin.yml zu beschreiben. -Es ist nicht erforderlich, eine Klasse für die Vervollständigung der Registerkarte zu erstellen.
-Der Code ist in der Regel lang. (Schwer zu sehen)
Vielen Dank für das Lesen des Artikels. Dies ist das erste Mal, dass ich einen Artikel geschrieben habe, daher war er möglicherweise schwer zu verstehen.