Bukkit 1.20.1 插件:限制非OP玩家箱子交互 (Java)
以下是使用Java编写的Bukkit插件代码,实现了当玩家不是OP时,可以打开箱子但不能拿出或放入物品,同时SHIFT+右键也不能放入物品。代码中包含中文注释,以帮助理解代码的功能。
import 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.plugin.java.JavaPlugin;
public class NoChestInteraction extends JavaPlugin implements Listener {
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onInventoryOpen(InventoryOpenEvent event) {
Player player = (Player) event.getPlayer();
Inventory inventory = event.getInventory();
BlockState blockState = inventory.getLocation().getBlock().getState();
// 检查玩家是否为OP
if (!player.isOp() && blockState instanceof Chest) {
event.setCancelled(true); // 取消打开箱子的事件
}
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
Player player = (Player) event.getWhoClicked();
Inventory inventory = event.getClickedInventory();
BlockState blockState = inventory.getLocation().getBlock().getState();
// 检查玩家是否为OP
if (!player.isOp() && blockState instanceof Chest) {
event.setCancelled(true); // 取消点击箱子的事件
}
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
Player player = event.getPlayer();
Block clickedBlock = event.getClickedBlock();
// 检查玩家是否为OP
if (!player.isOp() && clickedBlock != null && clickedBlock.getType() == Material.CHEST) {
event.setCancelled(true); // 取消与箱子交互的事件
}
}
}
请注意,这只是一个简单的示例代码,可能需要根据实际需求进行修改和扩展。
原文地址: https://www.cveoy.top/t/topic/fBrl 著作权归作者所有。请勿转载和采集!