Bukkit插件:基于HolographicDisplays实现箱子上方显示文字

本插件使用Java编写,基于HolographicDisplays 3.0.3版本,允许玩家在Shift+右键箱子时,在该箱子上方显示自定义HolographicDisplays文字。当两个箱子合并时,文字将只显示一条,并支持多个箱子合并显示。

主要功能

  • 玩家Shift+右键箱子时,在箱子上方显示自定义文字。* 支持两个箱子合并后,文字合并显示为一条。* 支持多个箱子合并显示文字。

代码示例

主类:ChestHologramPlugin.javajavaimport org.bukkit.Bukkit;import org.bukkit.ChatColor;import org.bukkit.Material;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.Action;import org.bukkit.event.player.PlayerInteractEvent;import org.bukkit.plugin.java.JavaPlugin;

import com.gmail.filoghost.holographicdisplays.api.HologramsAPI;import com.gmail.filoghost.holographicdisplays.api.Hologram;

public class ChestHologramPlugin extends JavaPlugin implements Listener {

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

@EventHandler    public void onPlayerInteract(PlayerInteractEvent event) {        Player player = event.getPlayer();

    if (event.getAction() == Action.RIGHT_CLICK_BLOCK && player.isSneaking()) {            Block clickedBlock = event.getClickedBlock();

        if (clickedBlock != null && clickedBlock.getType() == Material.CHEST) {                BlockFace blockFace = event.getBlockFace();                Block aboveBlock = clickedBlock.getRelative(blockFace);

            if (aboveBlock.getType() == Material.AIR) {                    Hologram hologram = HologramsAPI.createHologram(this, aboveBlock.getLocation().add(0.5, 1.0, 0.5));                    hologram.appendTextLine(ChatColor.GREEN + 'HolographicDisplays Text');

                // 将箱子和Hologram绑定在一起                    hologram.getVisibilityManager().showTo(player);                    hologram.getVisibilityManager().setVisibleByDefault(false);                    hologram.getVisibilityManager().showTo(player);

                // 存储箱子和对应的Hologram                    ChestHologramData.addHologram(clickedBlock, hologram);                }            }        }    }

// 在箱子合并时,将两个箱子上方的Hologram合并为一个    public void mergeChests(Block chest1, Block chest2) {        Hologram hologram1 = ChestHologramData.getHologram(chest1);        Hologram hologram2 = ChestHologramData.getHologram(chest2);

    if (hologram1 != null && hologram2 != null) {            Hologram mergedHologram = HologramsAPI.createHologram(this, hologram1.getLocation());            mergedHologram.appendTextLine(ChatColor.GREEN + 'Merged HolographicDisplays Text');

        // 将箱子和合并后的Hologram绑定在一起            mergedHologram.getVisibilityManager().showTo(hologram1.getVisibilityManager().getPlayers());            mergedHologram.getVisibilityManager().setVisibleByDefault(false);            mergedHologram.getVisibilityManager().showTo(hologram1.getVisibilityManager().getPlayers());

        // 移除原来的Hologram并存储合并后的Hologram            hologram1.delete();            hologram2.delete();            ChestHologramData.removeHologram(chest1);            ChestHologramData.removeHologram(chest2);            ChestHologramData.addHologram(chest1, mergedHologram);        }    }}

辅助类:ChestHologramData.javajavaimport org.bukkit.block.Block;import com.gmail.filoghost.holographicdisplays.api.Hologram;

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

public class ChestHologramData { private static Map<Block, Hologram> chestHolograms = new HashMap<>();

public static void addHologram(Block chest, Hologram hologram) {        chestHolograms.put(chest, hologram);    }

public static Hologram getHologram(Block chest) {        return chestHolograms.get(chest);    }

public static void removeHologram(Block chest) {        chestHolograms.remove(chest);    }}

注意

  • 这只是一个简单的示例插件,您可能需要根据您的具体需求进行修改和完善。* 请确保您已将HolographicDisplays插件安装到您的Bukkit服务器中。* 您需要将代码中的 'HolographicDisplays Text' 替换为您想要显示的实际文字。
Bukkit插件:基于HolographicDisplays实现箱子上方显示文字

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

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