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 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());
}); });
} }
} }