以下是一个示例代码,用于在Bukkit 1.20中使用HolographicDisplays 3.0.3来实现你描述的功能:

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
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.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.HologramsAPI;
import com.gmail.filoghost.holographicdisplays.api.line.TextLine;

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

public class Main extends JavaPlugin implements Listener {

    private Map<Location, Hologram> hologramsMap;

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

    @Override
    public void onDisable() {
        for (Hologram hologram : hologramsMap.values()) {
            hologram.delete();
        }
        hologramsMap.clear();
    }

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

        // 检查放置的方块是否是箱子
        if (block.getType().toString().contains("CHEST")) {
            // 获取箱子的位置
            Location chestLocation = block.getLocation();

            // 检查箱子上方是否已经有HolographicDisplays文字
            if (!hologramsMap.containsKey(chestLocation)) {
                // 创建一个新的Hologram对象
                Hologram hologram = HologramsAPI.createHologram(this, chestLocation.add(0.5, 1.5, 0.5));

                // 添加一个文本行到Hologram中
                TextLine textLine = hologram.appendTextLine("这是一个箱子");
                textLine.setTouchHandler(player -> {
                    // 当玩家点击Hologram时触发的操作
                    player.sendMessage("你点击了箱子");
                });

                // 将Hologram对象存储到Map中
                hologramsMap.put(chestLocation, hologram);
            }
        }
    }

    @EventHandler
    public void onInventoryClose(InventoryCloseEvent event) {
        Inventory inventory = event.getInventory();

        // 检查关闭的是一个箱子
        if (inventory.getType().toString().contains("CHEST")) {
            // 获取箱子的位置
            Location chestLocation = inventory.getLocation();

            // 检查箱子上方是否有HolographicDisplays文字
            if (hologramsMap.containsKey(chestLocation)) {
                Hologram hologram = hologramsMap.get(chestLocation);

                // 检查箱子是否为空
                boolean isEmpty = true;
                for (ItemStack item : inventory.getContents()) {
                    if (item != null) {
                        isEmpty = false;
                        break;
                    }
                }

                // 如果箱子为空,删除Hologram对象
                if (isEmpty) {
                    hologram.delete();
                    hologramsMap.remove(chestLocation);
                }
            }
        }
    }
}

这个示例代码创建了一个Hologram对象,当玩家放置一个箱子时,在箱子上方显示"HolographicDisplays文字"。当玩家关闭一个箱子时,检查箱子是否为空,如果为空,则删除对应的Hologram对象。

用Java写一个Bukkit120基于HolographicDisplays303 当玩家放置箱子时 箱子上方出现HolographicDisplays文字两个箱子合并时只显示一个箱子上的HolographicDisplays文字存在多个箱子

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

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