VersionCheckerListener.java
package dev.aura.bungeechat.listener;
import dev.aura.bungeechat.BungeeChat;
import dev.aura.bungeechat.message.Messages;
import dev.aura.bungeechat.message.MessagesService;
import dev.aura.bungeechat.permission.Permission;
import dev.aura.bungeechat.permission.PermissionManager;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.PostLoginEvent;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.event.EventHandler;
import net.md_5.bungee.event.EventPriority;
@RequiredArgsConstructor
public class VersionCheckerListener implements Listener {
private static final long FIVE_MINUTES = TimeUnit.MINUTES.toMillis(5);
private long lastCheck = System.currentTimeMillis();
private final boolean checkOnAdminLogin;
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerJoin(PostLoginEvent e) {
ProxiedPlayer player = e.getPlayer();
if (PermissionManager.hasPermission(player, Permission.CHECK_VERSION)) {
BungeeChat instance = BungeeChat.getInstance();
ProxyServer.getInstance()
.getScheduler()
.schedule(instance, new VersionCheckerTask(player, instance), 1, TimeUnit.SECONDS);
}
}
@RequiredArgsConstructor
private class VersionCheckerTask implements Runnable {
private final ProxiedPlayer player;
private final BungeeChat instance;
@Override
public void run() {
if (checkOnAdminLogin || ((lastCheck + FIVE_MINUTES) < System.currentTimeMillis())) {
instance.getLatestVersion(true);
lastCheck = System.currentTimeMillis();
}
if (!instance.isLatestVersion() && player.isConnected()) {
MessagesService.sendMessage(
player, Messages.UPDATE_AVAILABLE.get(player, instance.getLatestVersion()));
}
}
}
}