以下是一个用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.inventory.ItemStack;
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;
    }
}

请注意,此插件仅适用于Bukkit 1.20.1版本。您需要将此代码保存为一个Java类文件,并将其编译为插件(.jar文件),然后将其放入您的服务器的插件文件夹中。启动服务器后,插件将自动生效。

插件的功能是,当玩家放置一个箱子时,它会自动上锁。插件使用一个Map来跟踪哪些箱子被锁定。当两个箱子合并成一个大箱子时,插件会检查它们是否有一个箱子被锁定,如果是,则阻止物品在箱子之间移动。

请确保您的服务器已经安装了Bukkit 1.20.1版本,并且已经安装了Java开发工具包(JDK)以编译插件。

用Java写一个Bukkit1201 玩家放置箱子后自动上锁俩箱子合并成大箱子后只要有一个箱子受保护则全部受保护

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

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