以下是用Java编写的Bukkit插件,实现了在放下箱子后,在箱子上方显示一个HolographicDisplays文字(显示箱子所有者),并在拆掉箱子后删除HolographicDisplays文字。同时,如果有多个箱子放在一起,只显示一个HolographicDisplays文字。

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
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.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

import com.gmail.filoghost.holographicdisplays.api.Hologram;
import com.gmail.filoghost.holographicdisplays.api.HologramsAPI;

public class ChestOwnerPlugin extends JavaPlugin implements Listener {
    
    private Hologram currentHologram;
    
    @Override
    public void onEnable() {
        // 注册事件监听器
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
    }
    
    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent event) {
        Player player = event.getPlayer();
        
        if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
            Block clickedBlock = event.getClickedBlock();
            
            if (clickedBlock.getType() == Material.CHEST) {
                Chest chest = (Chest) clickedBlock.getState();
                Location chestLocation = chest.getLocation();
                
                if (currentHologram != null) {
                    Location hologramLocation = currentHologram.getLocation();
                    
                    // 如果放下的箱子与当前Hologram的位置相同,则不做任何操作
                    if (chestLocation.equals(hologramLocation)) {
                        return;
                    } else {
                        // 删除当前Hologram
                        currentHologram.delete();
                    }
                }
                
                // 创建新的Hologram
                createHologram(player, chestLocation);
            }
        }
    }
    
    private void createHologram(Player player, Location location) {
        // 获取HolographicDisplays插件的API实例
        Hologram hologram = HologramsAPI.createHologram(this, location.clone().add(0.5, 1.5, 0.5));
        
        // 设置Hologram的文本内容为箱子所有者
        Chest chest = (Chest) location.getBlock().getState();
        String ownerName = chest.getOwner().getName();
        hologram.appendTextLine(ownerName);
        
        // 将新的Hologram设置为当前Hologram
        currentHologram = hologram;
        
        // 使用定时器检查箱子是否被拆除
        new BukkitRunnable() {
            
            @Override
            public void run() {
                if (chest.getBlock().getType() != Material.CHEST) {
                    // 删除Hologram
                    hologram.delete();
                    currentHologram = null;
                    
                    // 取消定时器
                    this.cancel();
                }
            }
        }.runTaskTimer(this, 20L, 20L); // 每秒检查一次
    }
}

请注意,此代码依赖于HolographicDisplays插件。在使用之前,请确保已在服务器上安装了HolographicDisplays插件,并将其添加到项目的依赖项中。此外,还需要将com.gmail.filoghost.holographicdisplays.api包导入到项目中

用Java写一个Bukkit120玩家放下箱子之后在箱子上面显示一个holographicdisplays文字 所有者拆掉箱子后holographicdisplays文字删除两个箱子只显示一个holographicdisplays文字

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

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