Bukkit 1.20.1 箱子自动上锁插件

这是一个用 Java 编写的 Bukkit 插件,实现了以下功能:

  • 玩家放置箱子后自动上锁
  • 当两个箱子合并成大箱子后,只要有一个箱子受保护,则全部受保护

以下是插件代码:

import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.Chest;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.inventory.InventoryMoveItemEvent;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.HashMap;
import java.util.Map;

public class ChestLockPlugin extends JavaPlugin implements Listener {

    private Map<Block, Boolean> lockedChests;

    @Override
    public void onEnable() {
        lockedChests = new HashMap<>();
        getServer().getPluginManager().registerEvents(this, this);
    }

    @Override
    public void onDisable() {
        lockedChests.clear();
    }

    @EventHandler
    public void onBlockPlace(BlockPlaceEvent event) {
        Block block = event.getBlock();
        if (block.getType() == Material.CHEST) {
            Chest chest = (Chest) block.getState();
            lockedChests.put(chest.getBlock(), true);
        }
    }

    @EventHandler
    public void onInventoryMoveItem(InventoryMoveItemEvent event) {
        InventoryHolder sourceHolder = event.getSource().getHolder();
        InventoryHolder destinationHolder = event.getDestination().getHolder();

        if (sourceHolder instanceof Chest && destinationHolder instanceof Chest) {
            Chest sourceChest = (Chest) sourceHolder;
            Chest destinationChest = (Chest) destinationHolder;

            boolean sourceLocked = isChestLocked(sourceChest.getBlock());
            boolean destinationLocked = isChestLocked(destinationChest.getBlock());

            if (sourceLocked || destinationLocked) {
                event.setCancelled(true);
            }
        }
    }

    private boolean isChestLocked(Block block) {
        BlockState state = block.getState();
        if (state instanceof Chest) {
            Chest chest = (Chest) state;
            return lockedChests.containsKey(chest.getBlock());
        }
        return false;
    }
}

使用方法:

  1. 将以上代码保存为 ChestLockPlugin.java 文件。
  2. 使用 Java 开发工具包 (JDK) 编译该文件,生成 ChestLockPlugin.jar 文件。
  3. ChestLockPlugin.jar 文件放入您的 Bukkit 1.20.1 服务器的 plugins 文件夹中。
  4. 启动服务器,插件将自动生效。

功能说明:

  • 当玩家放置一个箱子时,插件会自动将其锁定。
  • 当两个箱子合并成一个大箱子时,如果其中一个箱子被锁定,则整个大箱子都会被锁定,阻止玩家在箱子之间移动物品。

注意:

  • 此插件仅适用于 Bukkit 1.20.1 版本。
  • 确保您的服务器已安装 Java 开发工具包 (JDK) 以编译插件。
Bukkit 1.20.1 箱子自动上锁插件

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

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