Bukkit 1.20.1 插件: 禁止非OP玩家操作箱子
Bukkit 1.20.1 插件: 禁止非OP玩家操作箱子
以下是使用Java编写的Bukkit插件,当玩家不是OP时,可以打开箱子但不能拿出物品和放入物品,同时SHIFT+右键也不能放入物品。注释为中文。javaimport org.bukkit.Material;import org.bukkit.block.Block;import org.bukkit.block.BlockState;import org.bukkit.block.Chest;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.InventoryOpenEvent;import org.bukkit.event.player.PlayerInteractEvent;import org.bukkit.inventory.Inventory;import org.bukkit.inventory.ItemStack;import org.bukkit.plugin.java.JavaPlugin;
public class NoChestManipulation extends JavaPlugin implements Listener {
@Override public void onEnable() { getServer().getPluginManager().registerEvents(this, this); }
@EventHandler public void onInventoryOpen(InventoryOpenEvent event) { Player player = (Player) event.getPlayer(); if (!player.isOp()) { Inventory inventory = event.getInventory(); if (inventory.getHolder() instanceof Chest) { event.setCancelled(true); } } }
@EventHandler public void onInventoryClick(InventoryClickEvent event) { Player player = (Player) event.getWhoClicked(); if (!player.isOp()) { Inventory clickedInventory = event.getClickedInventory(); if (clickedInventory != null && clickedInventory.getHolder() instanceof Chest) { event.setCancelled(true); } } }
@EventHandler public void onPlayerInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); if (!player.isOp()) { Block clickedBlock = event.getClickedBlock(); if (clickedBlock != null && clickedBlock.getType() == Material.CHEST) { BlockState blockState = clickedBlock.getState(); if (blockState instanceof Chest) { Chest chest = (Chest) blockState; Inventory chestInventory = chest.getInventory(); if (chestInventory != null) { event.setCancelled(true); } } } } }}
请确保你的项目中已经包含了Bukkit API的依赖,并将以上代码放入你的插件主类中。这个插件将会阻止非OP玩家与箱子交互,包括打开、取出物品和放入物品,以及使用SHIFT+右键放入物品。
原文地址: https://www.cveoy.top/t/topic/fBri 著作权归作者所有。请勿转载和采集!