import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

public class ChestProtectionPlugin extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent event) {
        Player player = event.getPlayer();
        Block block = event.getClickedBlock();
        Action action = event.getAction();

        // 检查玩家是否点击了一个箱子
        if (block != null && block.getType() == Material.CHEST) {
            // 检查玩家是否是OP
            if (!player.isOp()) {
                // 检查玩家是否试图放入或拿出物品
                if (action == Action.RIGHT_CLICK_BLOCK) {
                    Inventory chestInventory = ((org.bukkit.block.Chest) block.getState()).getInventory();
                    ItemStack itemInHand = player.getInventory().getItemInMainHand();

                    // 检查玩家是否按下了SHIFT键
                    if (player.isSneaking()) {
                        // 取消事件,阻止玩家放入物品
                        event.setCancelled(true);
                    } else if (itemInHand.getType() != Material.AIR) {
                        // 取消事件,阻止玩家拿出物品
                        event.setCancelled(true);
                    }
                }
            }
        }
    }
}

这是一个使用 Java 编写的 Bukkit 插件,用于增强服务器安全性。

功能:

  • 允许非OP玩家打开箱子查看内容。
  • 阻止非OP玩家从箱子中取出任何物品。
  • 阻止非OP玩家向箱子中放入任何物品,即使按下 SHIFT+右键 也无法放入。

使用方法:

  1. 将编译好的插件jar文件放入服务器的 plugins 文件夹中。
  2. 重启服务器或重新加载插件。

适用版本:

  • Bukkit 1.20.1

注意:

  • 该插件只对非OP玩家有效。
  • OP玩家仍然可以自由存取箱子中的物品。
Bukkit 1.20.1 防盗箱插件:非OP玩家可查看但无法存取物品

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

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