以下是一个示例代码,使用 Java 编写,基于 Bukkit 1.20 和 HolographicDisplays 3.0.3。该代码实现了在玩家放置箱子后,在箱子上方显示一条 HolographicDisplays 文字,并且当两个箱子合并时,文字会自动居中。

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.player.PlayerInteractEvent;
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.VisibilityManager;
import com.gmail.filoghost.holographicdisplays.api.line.TextLine;

public class YourPlugin extends JavaPlugin implements Listener {
    
    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this, this);
    }
    
    @EventHandler
    public void onBlockPlace(BlockPlaceEvent event) {
        Block block = event.getBlockPlaced();
        if (block.getType().toString().contains('CHEST')) {
            Location location = block.getLocation().add(0.5, 1.8, 0.5); // 箱子上方的位置
            Hologram hologram = HologramsAPI.createHologram(this, location);
            hologram.appendTextLine('Your Text'); // 要显示的文字
            
            // 设置文字居中
            VisibilityManager visibilityManager = hologram.getVisibilityManager();
            for (TextLine line : hologram.getLines()) {
                line.setAllowOverlapping(false);
                line.setCentered(true);
                visibilityManager.showTo(event.getPlayer());
            }
        }
    }
    
    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent event) {
        Player player = event.getPlayer();
        Block clickedBlock = event.getClickedBlock();
        if (clickedBlock != null && clickedBlock.getType().toString().contains('CHEST')) {
            BlockFace[] faces = { BlockFace.NORTH, BlockFace.SOUTH, BlockFace.EAST, BlockFace.WEST };
            for (BlockFace face : faces) {
                Block relativeBlock = clickedBlock.getRelative(face);
                if (relativeBlock.getType().toString().contains('CHEST')) {
                    Location location = relativeBlock.getLocation().add(0.5, 1.8, 0.5);
                    Hologram hologram = HologramsAPI.getHolograms(this).stream()
                            .filter(h -> h.getLocation().equals(location)).findFirst().orElse(null);
                    if (hologram != null) {
                        hologram.teleport(hologram.getLocation().add(0.5, 0, 0.5));
                    }
                }
            }
        }
    }
}

请确保已经在项目中导入了 HolographicDisplays 的库,并将代码保存为你的插件主类。插件将自动在玩家放置箱子时,在箱子上方显示一条 HolographicDisplays 文字,并且当两个箱子合并时,文字会自动居中。

Bukkit 1.20 HolographicDisplays 3.0.3: 玩家放置箱子后显示文字并自动居中

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

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