/* * _____ __ _ _ _____ _ * | __|___ ___ _ _ ___ ___| | |_|___| |_| _ | |_ _ ___ * |__ | -_| _| | | -_| _| |__| |_ -| _| __| | | |_ -| * |_____|___|_| \_/|___|_| |_____|_|___|_| |__| |_|___|___| * * ServerListPlus - http://git.io/slp * Copyright (c) 2014, Minecrell <https://github.com/Minecrell> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package net.minecrell.serverlistplus.bukkit.handlers; import net.minecrell.serverlistplus.bukkit.BukkitPlugin; import net.minecrell.serverlistplus.core.favicon.FaviconSource; import net.minecrell.serverlistplus.core.status.ResponseFetcher; import net.minecrell.serverlistplus.core.status.StatusResponse; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.server.ServerListPingEvent; import org.bukkit.util.CachedServerIcon; public class BukkitEventHandler extends StatusHandler { private PingListener listener; public BukkitEventHandler(BukkitPlugin plugin) { super(plugin); } public final class PingListener implements Listener { private PingListener() {} @EventHandler public void onServerListPing(final ServerListPingEvent event) { if (bukkit.getCore() == null) return; // Too early, we haven't finished initializing yet StatusResponse response = bukkit.getCore().createRequest(event.getAddress()).createResponse( bukkit.getCore().getStatus(), new ResponseFetcher() { @Override public Integer getOnlinePlayers() { return event.getNumPlayers(); } @Override public Integer getMaxPlayers() { return event.getMaxPlayers(); } @Override public int getProtocolVersion() { return -1; } }); // Description String message = response.getDescription(); if (message != null) event.setMotd(message); // Max players Integer max = response.getMaxPlayers(); if (max != null) event.setMaxPlayers(max); // Favicon FaviconSource favicon = response.getFavicon(); if (favicon != null) { CachedServerIcon icon = bukkit.getFavicon(favicon); if (icon != null) try { event.setServerIcon(icon); } catch (UnsupportedOperationException ignored) {} } } } @Override public boolean register() { if (listener == null) { bukkit.registerListener(this.listener = new PingListener()); return true; } else return false; } @Override public boolean unregister() { if (listener != null) { bukkit.unregisterListener(listener); this.listener = null; return true; } else return false; } }