Bukkit 1.20 自定义箱子全息显示 (HolographicDisplays 3.0.3)
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); } }}
使用方法
- 确保您已将HolographicDisplays 3.0.3插件安装到您的Bukkit 1.20服务器,并将插件文件放置在
plugins文件夹中。2. 将上述代码保存为ChestHologramPlugin.java文件。3. 使用Java编译器编译该文件。4. 将编译后的.jar文件放入服务器的plugins文件夹中。5. 启动或重启您的服务器。
现在,当玩家在游戏中Shift+右键单击箱子时,箱子上方将显示您设置的全息文字。
注意
- 确保您已将代码中的所有双引号替换为单引号。- 您需要根据自己的需求修改全息文字的内容。- 该代码示例仅供参考,您可以根据自己的需求进行修改和扩展。
原文地址: https://www.cveoy.top/t/topic/fRl7 著作权归作者所有。请勿转载和采集!