Bukkit 1.20.1 限制玩家从箱子中取物品:Java 代码示例
要实现这个功能,你可以使用 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 时,他们将能够打开箱子,但不能拿出箱子的物品。如果他们尝试拿出物品,他们将收到一条提示信息。
请注意,这段代码只会影响玩家从箱子中拿出物品的操作,而不会影响玩家将物品放入箱子中的操作。如果你希望完全禁止玩家与箱子交互,请修改代码以取消拖拽物品到箱子中的事件。
原文地址: https://www.cveoy.top/t/topic/qhcy 著作权归作者所有。请勿转载和采集!