Bukkit 1.20 自定义箱子全息显示 (HolographicDisplays 3.0.3)

本教程将指导您使用Java、Bukkit 1.20和HolographicDisplays 3.0.3插件创建一个自定义插件,该插件能够在玩家Shift+右键单击箱子时,在箱子上方显示全息文字。此外,我们还将实现合并箱子时仅显示一条信息的功能。

代码示例javaimport org.bukkit.Bukkit;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.Hologram;import com.gmail.filoghost.holographicdisplays.api.HologramsAPI;

public class ChestHologramPlugin extends JavaPlugin implements Listener {

@Override    public void onEnable() {        // 注册事件监听器        getServer().getPluginManager().registerEvents(this, this);    }

@EventHandler    public void onPlayerInteract(PlayerInteractEvent event) {        Player player = event.getPlayer();                // 检查玩家是否按下了Shift和右键        if (event.getAction() == Action.RIGHT_CLICK_BLOCK && player.isSneaking()) {            Block clickedBlock = event.getClickedBlock();                        // 检查点击的方块是否为箱子            if (clickedBlock.getType() == Material.CHEST || clickedBlock.getType() == Material.TRAPPED_CHEST) {                // 获取箱子上方的方块                Block aboveBlock = clickedBlock.getRelative(BlockFace.UP);                                // 获取或创建HolographicDisplays的Hologram                Hologram hologram = HologramsAPI.createHologram(this, aboveBlock.getLocation().add(0.5, 1.0, 0.5));                                // 设置Hologram的文本                hologram.clearLines();                hologram.appendTextLine('这是一个箱子');                                // 将Hologram绑定到箱子上                hologram.getVisibilityManager().setVisibleByDefault(false);                hologram.getVisibilityManager().showTo(player);                hologram.getVisibilityManager().setVisibleByDefault(true);                hologram.getVisibilityManager().hideTo(player);                                // 将Hologram与箱子关联                HologramUtil.linkHologramToBlock(hologram, clickedBlock);            }        }    }

@Override    public void onDisable() {        // 删除所有Hologram        HologramsAPI.getHolograms(this).forEach(Hologram::delete);    }        public static class HologramUtil {        // 将Hologram与方块关联        public static void linkHologramToBlock(Hologram hologram, Block block) {            String blockKey = getBlockKey(block);            hologram.getMetadata().set('linkedBlock', blockKey);        }                // 获取方块的唯一标识        public static String getBlockKey(Block block) {            return block.getWorld().getName() + ';' + block.getX() + ';' + block.getY() + ';' + block.getZ();        }                // 获取与方块关联的Hologram        public static Hologram getHologramLinkedToBlock(Block block) {            String blockKey = getBlockKey(block);            return HologramsAPI.getHolograms(plugin).stream()                    .filter(hologram -> hologram.getMetadata().has('linkedBlock'))                    .filter(hologram -> hologram.getMetadata().getString('linkedBlock').equals(blockKey))                    .findFirst().orElse(null);        }    }}

使用方法

  1. 确保您已将HolographicDisplays 3.0.3插件安装到您的Bukkit 1.20服务器,并将插件文件放置在plugins文件夹中。2. 将上述代码保存为ChestHologramPlugin.java文件。3. 使用Java编译器编译该文件。4. 将编译后的.jar文件放入服务器的plugins文件夹中。5. 启动或重启您的服务器。

现在,当玩家在游戏中Shift+右键单击箱子时,箱子上方将显示您设置的全息文字。

注意

  • 确保您已将代码中的所有双引号替换为单引号。- 您需要根据自己的需求修改全息文字的内容。- 该代码示例仅供参考,您可以根据自己的需求进行修改和扩展。
Bukkit 1.20 自定义箱子全息显示 (HolographicDisplays 3.0.3)

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

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