handle no-instances-available

This commit is contained in:
kento2 2026-06-02 03:14:41 +02:00
parent e87ccbb7cb
commit 4a1fc95a36

View file

@ -9,6 +9,7 @@ import de.kentoj.scrow.bukkit.ScrowAPI;
import de.kentoj.scrowlib.servermanager.ServerInstance;
import lombok.Getter;
import org.bukkit.command.CommandSender;
import reactor.core.publisher.Mono;
public class PlayCommand implements CommandExecutor<CommandSender, BukkitCommandContext> {
@ -26,16 +27,17 @@ public class PlayCommand implements CommandExecutor<CommandSender, BukkitCommand
@Override
public void execute(BukkitCommandContext ctx) {
var gamemode = ctx.getArg(gamemodeArg);
ScrowAPI.getServerManager().getRunningServers().filter(
inst -> inst.getTemplateName().equals(gamemode) && inst.getState().equals("UP")
)
.single()
ScrowAPI.getServerManager().getRunningServers()
.filter(inst -> inst.getTemplateName().equals(gamemode))
.filter(inst -> inst.getState().equals("UP"))
.next()
.switchIfEmpty(Mono.error(new IllegalStateException("No instance available")))
.map(ServerInstance::getHandle)
.flatMap(handle ->
ScrowAPI.getServerManager().sendPlayer(ctx.getPlayerSender().getUniqueId(), handle)
)
.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());
});
}
}