用Java写一个Bukkit120玩家放下箱子之后在箱子上面显示一个holographicdisplays文字 所有者拆掉箱子后holographicdisplays文字删除两个箱子只显示一个holographicdisplays文字
以下是用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包导入到项目中
原文地址: https://www.cveoy.top/t/topic/h2AF 著作权归作者所有。请勿转载和采集!