Bukkit 1.20 HolographicDisplays 3.0.3: 玩家放置箱子后显示文字并自动居中
以下是一个示例代码,使用 Java 编写,基于 Bukkit 1.20 和 HolographicDisplays 3.0.3。该代码实现了在玩家放置箱子后,在箱子上方显示一条 HolographicDisplays 文字,并且当两个箱子合并时,文字会自动居中。
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.player.PlayerInteractEvent;
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.VisibilityManager;
import com.gmail.filoghost.holographicdisplays.api.line.TextLine;
public class YourPlugin extends JavaPlugin implements Listener {
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
Block block = event.getBlockPlaced();
if (block.getType().toString().contains('CHEST')) {
Location location = block.getLocation().add(0.5, 1.8, 0.5); // 箱子上方的位置
Hologram hologram = HologramsAPI.createHologram(this, location);
hologram.appendTextLine('Your Text'); // 要显示的文字
// 设置文字居中
VisibilityManager visibilityManager = hologram.getVisibilityManager();
for (TextLine line : hologram.getLines()) {
line.setAllowOverlapping(false);
line.setCentered(true);
visibilityManager.showTo(event.getPlayer());
}
}
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
Player player = event.getPlayer();
Block clickedBlock = event.getClickedBlock();
if (clickedBlock != null && clickedBlock.getType().toString().contains('CHEST')) {
BlockFace[] faces = { BlockFace.NORTH, BlockFace.SOUTH, BlockFace.EAST, BlockFace.WEST };
for (BlockFace face : faces) {
Block relativeBlock = clickedBlock.getRelative(face);
if (relativeBlock.getType().toString().contains('CHEST')) {
Location location = relativeBlock.getLocation().add(0.5, 1.8, 0.5);
Hologram hologram = HologramsAPI.getHolograms(this).stream()
.filter(h -> h.getLocation().equals(location)).findFirst().orElse(null);
if (hologram != null) {
hologram.teleport(hologram.getLocation().add(0.5, 0, 0.5));
}
}
}
}
}
}
请确保已经在项目中导入了 HolographicDisplays 的库,并将代码保存为你的插件主类。插件将自动在玩家放置箱子时,在箱子上方显示一条 HolographicDisplays 文字,并且当两个箱子合并时,文字会自动居中。
原文地址: https://www.cveoy.top/t/topic/fRlF 著作权归作者所有。请勿转载和采集!