以下是一个示例 Java 代码,用于实现当玩家放置箱子后自动上锁并记录,以及当两个箱子合并为大箱子后,如果有一个小箱子上锁则自动上锁:

import org.bukkit.Bukkit;
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.block.BlockPlaceEvent;
import org.bukkit.event.inventory.InventoryMoveItemEvent;
import org.bukkit.inventory.Inventory;
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<>();
        Bukkit.getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onBlockPlace(BlockPlaceEvent event) {
        Player player = event.getPlayer();
        Block block = event.getBlock();

        if (block.getType() == Material.CHEST) {
            Chest chest = (Chest) block.getState();
            lockedChests.put(chest.getBlock(), false);
            player.sendMessage('箱子已放置并自动解锁。');
        }
    }

    @EventHandler
    public void onInventoryMoveItem(InventoryMoveItemEvent event) {
        Inventory sourceInventory = event.getSource();
        Inventory destinationInventory = event.getDestination();

        if (sourceInventory.getHolder() instanceof Chest && destinationInventory.getHolder() instanceof Chest) {
            Chest sourceChest = (Chest) sourceInventory.getHolder();
            Chest destinationChest = (Chest) destinationInventory.getHolder();

            if (lockedChests.containsKey(sourceChest.getBlock()) && lockedChests.containsKey(destinationChest.getBlock())) {
                boolean sourceChestLocked = lockedChests.get(sourceChest.getBlock());
                boolean destinationChestLocked = lockedChests.get(destinationChest.getBlock());

                if (sourceChestLocked || destinationChestLocked) {
                    lockedChests.put(sourceChest.getBlock(), true);
                    lockedChests.put(destinationChest.getBlock(), true);
                    event.setCancelled(true);
                    return;
                }
            }
        }
    }
}

请注意,此代码仅为示例,可能需要根据您的具体需求进行修改和调整。此外,您还需要将其编译为插件并将其放置在 Bukkit 服务器的插件文件夹中才能正常运行。


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

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