以下是一个示例代码,可以实现你描述的功能:

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
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.InventoryCloseEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

import com.gmail.filoghost.holographicdisplays.api.Hologram;
import com.gmail.filoghost.holographicdisplays.api.HolographicDisplaysAPI;
import com.gmail.filoghost.holographicdisplays.api.line.TextLine;

public class ChestLockPlugin extends JavaPlugin implements Listener {

    private Hologram hologram;

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

    @EventHandler
    public void onBlockPlace(BlockPlaceEvent event) {
        Block placedBlock = event.getBlock();
        if (placedBlock.getType() == Material.CHEST) {
            Chest chest = (Chest) placedBlock.getState();
            // 设置箱子为上锁状态
            chest.setCustomName("Locked Chest");
            chest.update();

            // 创建并显示HolographicDisplays文字
            Location hologramLocation = placedBlock.getLocation().add(0.5, 1.5, 0.5);
            hologram = HolographicDisplaysAPI.createHologram(this, hologramLocation);
            TextLine textLine = hologram.appendTextLine("Locked Chest");
            hologram.spawn();
        }
    }

    @EventHandler
    public void onInventoryClose(InventoryCloseEvent event) {
        Inventory inventory = event.getInventory();
        if (inventory.getHolder() instanceof Chest) {
            Chest chest = (Chest) inventory.getHolder();
            // 检查合并的箱子
            Block chestBlock = chest.getBlock();
            Block adjacentChestBlock = chestBlock.getRelative(BlockFace.EAST);
            if (adjacentChestBlock.getType() == Material.CHEST) {
                Chest adjacentChest = (Chest) adjacentChestBlock.getState();
                if (chest.getInventory().getSize() == 27 && adjacentChest.getInventory().getSize() == 27) {
                    // 合并箱子
                    Inventory mergedInventory = Bukkit.createInventory(chest.getInventory().getHolder(), 54, "Merged Chest");
                    mergedInventory.setContents(chest.getInventory().getContents());
                    mergedInventory.setContents(adjacentChest.getInventory().getContents());

                    // 更新合并后的箱子
                    chest.getInventory().setContents(mergedInventory.getContents());
                    chest.update();

                    // 删除旧的HolographicDisplays文字
                    if (hologram != null) {
                        hologram.delete();
                        hologram = null;
                    }

                    // 创建并显示新的HolographicDisplays文字
                    Location hologramLocation = chestBlock.getLocation().add(0.5, 1.5, 0.5);
                    hologram = HolographicDisplaysAPI.createHologram(this, hologramLocation);
                    TextLine textLine = hologram.appendTextLine("Merged Chest");
                    hologram.spawn();
                }
            }
        }
    }

    // 在插件重载后重新显示HolographicDisplays文字
    @Override
    public void onReload() {
        if (hologram != null) {
            hologram.spawn();
        }
    }

    @Override
    public void onDisable() {
        if (hologram != null) {
            hologram.delete();
        }
    }
}

请注意,这只是一个示例代码,你可能需要根据自己的需求进行修改和优化。另外,这个示例使用了HolographicDisplays插件的API,你需要确保已经正确安装和配置了HolographicDisplays插件

用Java写一个Bukkit1201的 放置箱子后自动上锁并显示HolographicDisplays文字两个箱子合并后只显示一个的HolographicDisplays文字并且插件重载后HolographicDisplays文字会重新显示出来

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

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