Bukkit插件:基于HolographicDisplays实现箱子上方显示文字
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'替换为您想要显示的实际文字。
原文地址: https://www.cveoy.top/t/topic/fRmc 著作权归作者所有。请勿转载和采集!