下面是一个用Java编写的Bukkit1.20.1插件,当玩家长时间不动时,会在头顶显示一个基于DecentHolograms插件的挂机信息。请注意,为了运行这个插件,您需要在Bukkit服务器上安装DecentHolograms插件。

package com.example.hangoutplugin;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.plugin.java.JavaPlugin;

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

public class HangoutPlugin extends JavaPlugin implements Listener {
    private Hologram hologram;
    private int taskId;

    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this, this);
        startCheckingTask();
    }

    @Override
    public void onDisable() {
        stopCheckingTask();
        hologram.delete();
    }

    private void startCheckingTask() {
        taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
            @Override
            public void run() {
                for (Player player : Bukkit.getOnlinePlayers()) {
                    Location lastLocation = player.getLocation();
                    Location currentLocation = player.getLocation();

                    if (lastLocation.distanceSquared(currentLocation) <= 0.0) {
                        showHangoutHologram(player);
                    } else {
                        hideHangoutHologram(player);
                    }

                    lastLocation = currentLocation;
                }
            }
        }, 0L, 20L); // 每秒检查一次玩家是否挂机(20 ticks = 1s)
    }

    private void stopCheckingTask() {
        Bukkit.getScheduler().cancelTask(taskId);
    }

    private void showHangoutHologram(Player player) {
        if (hologram == null) {
            hologram = HologramsAPI.createHologram(this, player.getLocation().add(0, 2, 0));
            hologram.appendTextLine(ChatColor.YELLOW + "你正在挂机!");
        } else {
            hologram.teleport(player.getLocation().add(0, 2, 0));
        }
    }

    private void hideHangoutHologram(Player player) {
        if (hologram != null) {
            hologram.delete();
            hologram = null;
        }
    }

    @EventHandler
    public void onPlayerMove(PlayerMoveEvent event) {
        Player player = event.getPlayer();
        Location lastLocation = event.getFrom();
        Location currentLocation = event.getTo();

        if (lastLocation.distanceSquared(currentLocation) > 0.0) {
            hideHangoutHologram(player);
        }
    }
}

请注意,上述代码需要在您的项目中包含DecentHolograms插件的库文件。另外,还需要在Bukkit服务器的插件文件夹中放置DecentHolograms插件的jar文件

用Java写一个Bukkit1201 玩家长时间不动进入挂机的时候 头顶显示一个基于DecentHolograms插件的挂机信息详细代码带注释

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

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