要实现这个功能,你可以使用 Bukkit 的事件监听器来检测玩家打开箱子的事件,并在玩家不是 OP 的情况下取消玩家拿出箱子物品的事件。

首先,你需要创建一个类来实现 Bukkit 的事件监听器接口。让我们称之为 ChestOpenListener

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;

public class ChestOpenListener implements Listener {
    @EventHandler
    public void onInventoryClick(InventoryClickEvent event) {
        Player player = (Player) event.getWhoClicked();
        Inventory clickedInventory = event.getClickedInventory();

        if (clickedInventory != null && clickedInventory.getType() == InventoryType.CHEST) {
            if (!player.isOp()) {
                event.setCancelled(true); // 取消拿出物品事件

                ItemStack currentItem = event.getCurrentItem();
                if (currentItem != null && currentItem.getType() == Material.AIR) {
                    player.sendMessage('你不能拿出箱子物品。');
                }
            }
        }
    }
}

接下来,你需要在你的主类中注册这个事件监听器。假设你的主类名为 Main

import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {
    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(new ChestOpenListener(), this);
    }
}

在插件的 plugin.yml 文件中,确保你已经将主类设置为 Main

这样,当玩家不是 OP 时,他们将能够打开箱子,但不能拿出箱子的物品。如果他们尝试拿出物品,他们将收到一条提示信息。

请注意,这段代码只会影响玩家从箱子中拿出物品的操作,而不会影响玩家将物品放入箱子中的操作。如果你希望完全禁止玩家与箱子交互,请修改代码以取消拖拽物品到箱子中的事件。

Bukkit 1.20.1 限制玩家从箱子中取物品:Java 代码示例

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

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