用Java写一个Bukkit120基于HolographicDisplays303的 玩家Shift+右键箱子可以让该箱子上方显示hd文字两个箱子合并后文字只显示一条存在多个箱子
以下是一个基于Bukkit 1.20和HolographicDisplays 3.0.3的Java代码示例,实现了当玩家Shift+右键箱子时,在该箱子上方显示HolographicDisplays文字。当两个箱子合并时,文字只显示一条,即合并后的箱子上方。
import 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插件,并将插件文件放置在服务器的plugins文件夹中。然后,使用Java编译器编译并运行该插件。
原文地址: https://www.cveoy.top/t/topic/ie3b 著作权归作者所有。请勿转载和采集!