Bukkit 1.20.1 玩家放置箱子后显示 HolographicDisplays 文字插件
以下是一个示例代码,演示如何使用 Java 编写一个插件,以实现在 Bukkit 1.20.1 中,玩家放置箱子后,在箱子上方显示基于 HolographicDisplays 插件的文字。当两个箱子合并为大箱子时,只显示一个箱子的 HolographicDisplays 文字,并且在插件重启时文字会重新出现。
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
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.BlockPlaceEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.plugin.java.JavaPlugin;
import com.gmail.filoghost.holographicdisplays.api.Hologram;
import com.gmail.filoghost.holographicdisplays.api.HolographicDisplaysAPI;
public class ChestHologramPlugin extends JavaPlugin implements Listener {
@Override
public void onEnable() {
// 注册事件监听器
getServer().getPluginManager().registerEvents(this, this);
}
@Override
public void onDisable() {
// 删除所有箱子上的 HolographicDisplays 文字
for (Hologram hologram : HolographicDisplaysAPI.getHolograms(this)) {
if (hologram.getLine(0).startsWith('Chest:')) {
hologram.delete();
}
}
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
Block block = event.getBlockPlaced();
if (block.getType() == Material.CHEST) {
showChestHologram(block);
}
}
@EventHandler
public void onInventoryOpen(InventoryOpenEvent event) {
if (event.getInventory().getType() == org.bukkit.event.inventory.InventoryType.CHEST) {
BlockState state = event.getInventory().getLocation().getBlock().getState();
if (state instanceof Chest) {
Chest chest = (Chest) state;
updateChestHologram(chest);
}
}
}
@EventHandler
public void onInventoryClose(InventoryCloseEvent event) {
if (event.getInventory().getType() == org.bukkit.event.inventory.InventoryType.CHEST) {
BlockState state = event.getInventory().getLocation().getBlock().getState();
if (state instanceof Chest) {
Chest chest = (Chest) state;
updateChestHologram(chest);
}
}
}
private void showChestHologram(Block block) {
Location location = block.getLocation().add(0.5, 1.5, 0.5);
Hologram hologram = HolographicDisplaysAPI.createHologram(this, location);
hologram.appendTextLine('Chest: ' + block.getX() + ', ' + block.getY() + ', ' + block.getZ());
}
private void updateChestHologram(Chest chest) {
Location location = chest.getLocation().add(0.5, 1.5, 0.5);
Hologram hologram = HolographicDisplaysAPI.getOrCreateHologram(this, location);
hologram.clearLines();
hologram.appendTextLine('Chest: ' + chest.getBlock().getX() + ', ' + chest.getBlock().getY() + ', ' + chest.getBlock().getZ());
}
}
请确保在编写代码之前已经将 HolographicDisplays 插件添加到您的项目中,并在插件的plugin.yml文件中添加以下内容:
depend: [HolographicDisplays]
请注意,此示例代码中的showChestHologram方法和updateChestHologram方法分别用于在箱子放置和打开/关闭事件中显示和更新 HolographicDisplays 文字。
原文地址: https://www.cveoy.top/t/topic/fQs1 著作权归作者所有。请勿转载和采集!