这是一个 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 消息给玩家。

Bukkit 1.20.1 玩家飞行状态 ActionBar 消息插件 (ProtocolLib)

原文地址: https://www.cveoy.top/t/topic/fv8d 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录