package fi.flexplex.connect; import com.destroystokyo.paper.event.server.WhitelistToggleEvent; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerLoginEvent; import fi.flexplex.connect.event.AsyncWhitelistChangedEvent; public final class FlexConnectListener implements Listener { private final FlexConnect flexConnect; public FlexConnectListener(final FlexConnect flexConnect) { this.flexConnect = flexConnect; } @EventHandler public void onPlayerLogin(final PlayerLoginEvent event) { if (flexConnect.getProxyAddresses().contains(event.getRealAddress().getHostAddress())) { // Connection is coming from allowed proxy return; } // Do not allow connections from other proxies event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Access denied"); } @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onWhitelistToggle(final WhitelistToggleEvent event) { Bukkit.getScheduler().runTaskAsynchronously(this.flexConnect, () -> this.flexConnect.getFlexPlexGraphQLApi().updateWhitelist(event.isEnabled()) ); } @EventHandler public void onAsyncWhitelistChanged(final AsyncWhitelistChangedEvent event) { this.flexConnect.getFlexPlexGraphQLApi().updateWhitelist(); } }