Fail silently when the Sponge Server is not available - closes #367

This commit is contained in:
Luck
2017-07-10 09:18:58 +01:00
Unverified
parent fce5b8430d
commit 1bb1f5ebb3
5 changed files with 126 additions and 68 deletions
@@ -64,6 +64,7 @@ import me.lucko.luckperms.common.tasks.ExpireTemporaryTask;
import me.lucko.luckperms.common.tasks.UpdateTask;
import me.lucko.luckperms.common.treeview.PermissionVault;
import me.lucko.luckperms.common.utils.BufferedRequest;
import me.lucko.luckperms.common.utils.FakeSender;
import me.lucko.luckperms.common.utils.FileWatcher;
import me.lucko.luckperms.common.utils.SenderLogger;
import me.lucko.luckperms.common.verbose.VerboseHandler;
@@ -107,7 +108,9 @@ import java.io.File;
import java.io.InputStream;
import java.nio.file.Path;
import java.util.AbstractCollection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Optional;
@@ -392,11 +395,19 @@ public class LPSpongePlugin implements LuckPermsPlugin {
@Override
public Player getPlayer(User user) {
if (!game.isServerAvailable()) {
return null;
}
return game.getServer().getPlayer(uuidCache.getExternalUUID(user.getUuid())).orElse(null);
}
@Override
public Optional<UUID> lookupUuid(String username) {
if (!game.isServerAvailable()) {
return Optional.empty();
}
CompletableFuture<GameProfile> fut = game.getServer().getGameProfileManager().get(username);
try {
return Optional.of(fut.get().getUniqueId());
@@ -448,26 +459,30 @@ public class LPSpongePlugin implements LuckPermsPlugin {
@Override
public int getPlayerCount() {
return game.getServer().getOnlinePlayers().size();
return game.isServerAvailable() ? game.getServer().getOnlinePlayers().size() : 0;
}
@Override
public List<String> getPlayerList() {
return game.getServer().getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList());
return game.isServerAvailable() ? game.getServer().getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()) : new ArrayList<>();
}
@Override
public Set<UUID> getOnlinePlayers() {
return game.getServer().getOnlinePlayers().stream().map(Player::getUniqueId).collect(Collectors.toSet());
return game.isServerAvailable() ? game.getServer().getOnlinePlayers().stream().map(Player::getUniqueId).collect(Collectors.toSet()) : new HashSet<>();
}
@Override
public boolean isPlayerOnline(UUID external) {
return game.getServer().getPlayer(external).map(Player::isOnline).orElse(false);
return game.isServerAvailable() ? game.getServer().getPlayer(external).map(Player::isOnline).orElse(false) : false;
}
@Override
public List<Sender> getOnlineSenders() {
if (!game.isServerAvailable()) {
return new ArrayList<>();
}
return game.getServer().getOnlinePlayers().stream()
.map(s -> getSenderFactory().wrap(s))
.collect(Collectors.toList());
@@ -475,6 +490,9 @@ public class LPSpongePlugin implements LuckPermsPlugin {
@Override
public Sender getConsoleSender() {
if (!game.isServerAvailable()) {
return new FakeSender(this, s -> logger.info(s));
}
return getSenderFactory().wrap(game.getServer().getConsole());
}
@@ -159,9 +159,9 @@ public class SpongeListener {
if (p.isPresent()) {
MutableContextSet context = MutableContextSet.fromSet(plugin.getContextManager().getApplicableContext(p.get()));
List<String> worlds = plugin.getGame().getServer().getWorlds().stream()
List<String> worlds = plugin.getGame().isServerAvailable() ? plugin.getGame().getServer().getWorlds().stream()
.map(World::getName)
.collect(Collectors.toList());
.collect(Collectors.toList()) : Collections.emptyList();
plugin.doAsync(() -> {
UserData data = user.getUserData();
@@ -67,6 +67,10 @@ public class BungeeMessagingService extends AbstractMessagingService implements
@Override
protected void sendMessage(String channel, String message) {
plugin.getSpongeScheduler().createTaskBuilder().interval(10, TimeUnit.SECONDS).execute(task -> {
if (!plugin.getGame().isServerAvailable()) {
return;
}
Collection<Player> players = plugin.getGame().getServer().getOnlinePlayers();
Player p = Iterables.getFirst(players, null);
if (p == null) {