以下是一个使用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文字。当两个箱子合并时,文字会合并为一条。

请注意,该代码仅为示例,可能需要根据实际需求进行修改和调整。

用Java写一个Bukkit120基于HolographicDisplays303的 玩家Shift+右键箱子可以让该箱子上方显示hd文字两个箱子合并后文字只显示一条

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

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