用Java写一个Bukkit120基于HolographicDisplays303 当玩家放置箱子时 箱子上方出现HolographicDisplays文字两个箱子合并时只显示一个箱子上的HolographicDisplays文字存在多个箱子
以下是一个示例代码,用于在Bukkit 1.20中使用HolographicDisplays 3.0.3来实现你描述的功能:
import org.bukkit.Bukkit;
import org.bukkit.Location;
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.BlockPlaceEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import com.gmail.filoghost.holographicdisplays.api.Hologram;
import com.gmail.filoghost.holographicdisplays.api.HologramsAPI;
import com.gmail.filoghost.holographicdisplays.api.line.TextLine;
import java.util.HashMap;
import java.util.Map;
public class Main extends JavaPlugin implements Listener {
private Map<Location, Hologram> hologramsMap;
@Override
public void onEnable() {
hologramsMap = new HashMap<>();
Bukkit.getPluginManager().registerEvents(this, this);
}
@Override
public void onDisable() {
for (Hologram hologram : hologramsMap.values()) {
hologram.delete();
}
hologramsMap.clear();
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
Block block = event.getBlock();
// 检查放置的方块是否是箱子
if (block.getType().toString().contains("CHEST")) {
// 获取箱子的位置
Location chestLocation = block.getLocation();
// 检查箱子上方是否已经有HolographicDisplays文字
if (!hologramsMap.containsKey(chestLocation)) {
// 创建一个新的Hologram对象
Hologram hologram = HologramsAPI.createHologram(this, chestLocation.add(0.5, 1.5, 0.5));
// 添加一个文本行到Hologram中
TextLine textLine = hologram.appendTextLine("这是一个箱子");
textLine.setTouchHandler(player -> {
// 当玩家点击Hologram时触发的操作
player.sendMessage("你点击了箱子");
});
// 将Hologram对象存储到Map中
hologramsMap.put(chestLocation, hologram);
}
}
}
@EventHandler
public void onInventoryClose(InventoryCloseEvent event) {
Inventory inventory = event.getInventory();
// 检查关闭的是一个箱子
if (inventory.getType().toString().contains("CHEST")) {
// 获取箱子的位置
Location chestLocation = inventory.getLocation();
// 检查箱子上方是否有HolographicDisplays文字
if (hologramsMap.containsKey(chestLocation)) {
Hologram hologram = hologramsMap.get(chestLocation);
// 检查箱子是否为空
boolean isEmpty = true;
for (ItemStack item : inventory.getContents()) {
if (item != null) {
isEmpty = false;
break;
}
}
// 如果箱子为空,删除Hologram对象
if (isEmpty) {
hologram.delete();
hologramsMap.remove(chestLocation);
}
}
}
}
}
这个示例代码创建了一个Hologram对象,当玩家放置一个箱子时,在箱子上方显示"HolographicDisplays文字"。当玩家关闭一个箱子时,检查箱子是否为空,如果为空,则删除对应的Hologram对象。
原文地址: https://www.cveoy.top/t/topic/ie3k 著作权归作者所有。请勿转载和采集!