Bukkit 1.20.1 玩家飞行状态 ActionBar 消息插件 (ProtocolLib)
这是一个 Bukkit 1.20.1 插件示例,使用 ProtocolLib 库在玩家开启飞行时显示 ActionBar 文字消息,关闭飞行时文字消失。
import net.minecraft.network.protocol.game.PacketPlayOutChat;
import net.minecraft.network.chat.ChatComponentText;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerToggleFlightEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
public class FlightActionBarPlugin extends JavaPlugin implements Listener {
@Override
public void onEnable() {
// 注册事件监听器
Bukkit.getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onPlayerToggleFlight(PlayerToggleFlightEvent event) {
Player player = event.getPlayer();
if (player.getAllowFlight()) {
if (event.isFlying()) {
// 开启飞行
sendActionBar(player, '飞行已开启');
} else {
// 关闭飞行
sendActionBar(player, '');
}
}
}
private void sendActionBar(Player player, String message) {
new BukkitRunnable() {
@Override
public void run() {
// 构造聊天消息对象
ChatComponentText text = new ChatComponentText(message);
// 构造发送聊天消息的Packet对象
PacketPlayOutChat packet = new PacketPlayOutChat(text);
// 发送Packet给玩家
((org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer) player).getHandle().b.sendPacket(packet);
}
}.runTask(this);
}
}
请确保你已经正确导入 ProtocolLib 库,并在你的插件主类中注册了监听器。在这个示例代码中,我们使用了 Bukkit 的 PlayerToggleFlightEvent 事件来检测玩家的飞行状态变化。在飞行状态变化时,我们通过调用 sendActionBar 方法来发送 ActionBar 消息。在 sendActionBar 方法中,我们使用 ProtocolLib 库来构造并发送 PacketPlayOutChat 消息给玩家。
原文地址: https://www.cveoy.top/t/topic/fv8d 著作权归作者所有。请勿转载和采集!