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();
        }
    }
}

使用说明:

  1. 确保项目中添加HolographicDisplays 3.0.3的依赖库。
  2. 在Bukkit服务器中启用该插件。
  3. 玩家加入服务器时,插件会创建一个Hologram对象。
  4. 玩家Shift+右键点击箱子时,插件会在箱子上方显示HolographicDisplays文字。
  5. 当两个箱子合并时,文字会合并为一条。

注意:

  • 该代码仅为示例,可能需要根据实际需求进行修改和调整。
  • HolographicDisplays插件需要单独安装,并确保版本兼容。
  • 可以根据需要修改代码中的文字内容。

代码解释:

  • playerHolograms 存储玩家与对应Hologram对象的映射关系。
  • blockHolograms 存储箱子与对应Hologram对象的映射关系。
  • onPlayerJoin 事件处理玩家加入服务器时创建Hologram对象。
  • onPlayerInteract 事件处理玩家Shift+右键点击箱子时显示HolographicDisplays文字。
  • onPlayerQuit 事件处理玩家离开服务器时删除Hologram对象。
  • onBlockMerge 事件处理箱子合并时删除Hologram对象。

其他功能:

  • 可以修改代码添加更多功能,例如:
    • 允许玩家自定义文字内容。
    • 允许玩家选择不同的文字颜色和样式。
    • 允许玩家控制Hologram的位置和方向。
    • 支持多语言显示。

希望这篇文章对您有所帮助!如果您有任何问题或建议,请随时提出。

Bukkit 1.20 HolographicDisplays 3.0.3 箱子上方显示自定义文字插件

原文地址: https://www.cveoy.top/t/topic/fRlM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录