handle no-instances-available
This commit is contained in:
parent
e87ccbb7cb
commit
4a1fc95a36
1 changed files with 7 additions and 5 deletions
|
|
@ -9,6 +9,7 @@ import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||||
import de.kentoj.scrowlib.servermanager.ServerInstance;
|
import de.kentoj.scrowlib.servermanager.ServerInstance;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
public class PlayCommand implements CommandExecutor<CommandSender, BukkitCommandContext> {
|
public class PlayCommand implements CommandExecutor<CommandSender, BukkitCommandContext> {
|
||||||
|
|
||||||
|
|
@ -26,16 +27,17 @@ public class PlayCommand implements CommandExecutor<CommandSender, BukkitCommand
|
||||||
@Override
|
@Override
|
||||||
public void execute(BukkitCommandContext ctx) {
|
public void execute(BukkitCommandContext ctx) {
|
||||||
var gamemode = ctx.getArg(gamemodeArg);
|
var gamemode = ctx.getArg(gamemodeArg);
|
||||||
ScrowAPI.getServerManager().getRunningServers().filter(
|
ScrowAPI.getServerManager().getRunningServers()
|
||||||
inst -> inst.getTemplateName().equals(gamemode) && inst.getState().equals("UP")
|
.filter(inst -> inst.getTemplateName().equals(gamemode))
|
||||||
)
|
.filter(inst -> inst.getState().equals("UP"))
|
||||||
.single()
|
.next()
|
||||||
|
.switchIfEmpty(Mono.error(new IllegalStateException("No instance available")))
|
||||||
.map(ServerInstance::getHandle)
|
.map(ServerInstance::getHandle)
|
||||||
.flatMap(handle ->
|
.flatMap(handle ->
|
||||||
ScrowAPI.getServerManager().sendPlayer(ctx.getPlayerSender().getUniqueId(), handle)
|
ScrowAPI.getServerManager().sendPlayer(ctx.getPlayerSender().getUniqueId(), handle)
|
||||||
)
|
)
|
||||||
.subscribe(null, ex -> {
|
.subscribe(null, ex -> {
|
||||||
ctx.getPlayerSender().sendMessage("failed sending you to " + gamemode + ": " + ex.getMessage());
|
ctx.getPlayerSender().sendMessage("failed sending you to an instance of " + gamemode + ": " + ex.getMessage());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue