Bukkit 1.20 HolographicDisplays 3.0.3 箱子上方显示自定义文字插件
Bukkit 1.20 HolographicDisplays 3.0.3 箱子上方显示自定义文字插件
这是一个使用Java编写的Bukkit插件,基于HolographicDisplays 3.0.3版本。该插件实现了当玩家Shift+右键点击箱子时,在该箱子上方显示HolographicDisplays文字,并且当两个箱子合并后,文字只显示一条。
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
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.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
import com.gmail.filoghost.holographicdisplays.api.Hologram;
import com.gmail.filoghost.holographicdisplays.api.HologramsAPI;
import java.util.HashMap;
import java.util.Map;
public class HolographicDisplaysPlugin extends JavaPlugin implements Listener {
private Map<Player, Hologram> playerHolograms;
private Map<Block, Hologram> blockHolograms;
@Override
public void onEnable() {
playerHolograms = new HashMap<>();
blockHolograms = new HashMap<>();
Bukkit.getPluginManager().registerEvents(this, this);
}
@Override
public void onDisable() {
playerHolograms.values().forEach(Hologram::delete);
blockHolograms.values().forEach(Hologram::delete);
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
playerHolograms.put(player, null);
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
Player player = event.getPlayer();
Action action = event.getAction();
if (action == Action.RIGHT_CLICK_BLOCK && player.isSneaking()) {
Block block = event.getClickedBlock();
if (block != null && block.getType() == Material.CHEST) {
Hologram hologram = blockHolograms.get(block);
if (hologram == null) {
hologram = HologramsAPI.createHologram(this, block.getLocation().add(0.5, 1.5, 0.5));
blockHolograms.put(block, hologram);
}
Hologram playerHologram = playerHolograms.get(player);
if (playerHologram != null) {
playerHologram.delete();
}
hologram.appendTextLine('HolographicDisplays Text');
playerHolograms.put(player, hologram);
}
}
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
Player player = event.getPlayer();
Hologram hologram = playerHolograms.remove(player);
if (hologram != null) {
hologram.delete();
}
}
@EventHandler
public void onBlockMerge(BlockMergeEvent event) {
Block mergedBlock = event.getMergedBlock();
Hologram hologram = blockHolograms.remove(mergedBlock);
if (hologram != null) {
hologram.delete();
}
}
}
使用说明:
- 确保项目中添加HolographicDisplays 3.0.3的依赖库。
- 在Bukkit服务器中启用该插件。
- 玩家加入服务器时,插件会创建一个Hologram对象。
- 玩家Shift+右键点击箱子时,插件会在箱子上方显示HolographicDisplays文字。
- 当两个箱子合并时,文字会合并为一条。
注意:
- 该代码仅为示例,可能需要根据实际需求进行修改和调整。
- HolographicDisplays插件需要单独安装,并确保版本兼容。
- 可以根据需要修改代码中的文字内容。
代码解释:
playerHolograms存储玩家与对应Hologram对象的映射关系。blockHolograms存储箱子与对应Hologram对象的映射关系。onPlayerJoin事件处理玩家加入服务器时创建Hologram对象。onPlayerInteract事件处理玩家Shift+右键点击箱子时显示HolographicDisplays文字。onPlayerQuit事件处理玩家离开服务器时删除Hologram对象。onBlockMerge事件处理箱子合并时删除Hologram对象。
其他功能:
- 可以修改代码添加更多功能,例如:
- 允许玩家自定义文字内容。
- 允许玩家选择不同的文字颜色和样式。
- 允许玩家控制Hologram的位置和方向。
- 支持多语言显示。
希望这篇文章对您有所帮助!如果您有任何问题或建议,请随时提出。
原文地址: https://www.cveoy.top/t/topic/fRlM 著作权归作者所有。请勿转载和采集!