bump version to 0.38-SNAPSHOT + pass input to SuggestionProvider + rewrite command parsing + ...
All checks were successful
Build and Deploy artifact / build (push) Successful in 1m31s

This commit is contained in:
kento2 2026-08-09 18:14:24 +02:00
parent 997906cd02
commit 23f7d1a550
26 changed files with 382 additions and 302 deletions

View file

@ -8,7 +8,7 @@ import java.util.List;
public final class PlayerSuggestionProvider<T> implements SuggestionProvider<T> {
@Override
public List<String> suggest(T __) {
public List<String> suggest(T __, String ___) {
return Bukkit.getOnlinePlayers().stream()
.map(Player::getName)
.toList();

View file

@ -1,5 +1,7 @@
package de.kentoj.kencommandapi.type;
import com.leakyabstractions.result.api.Result;
import com.leakyabstractions.result.core.Results;
import de.kentoj.kencommandapi.api.argument.ArgumentType;
import de.kentoj.kencommandapi.api.suggestion.SuggestionProvider;
import de.kentoj.kencommandapi.suggestionprovider.PlayerSuggestionProvider;
@ -11,20 +13,16 @@ import java.util.UUID;
public class OfflinePlayerArgumentType<T> implements ArgumentType<T, OfflinePlayer> {
@Override
public OfflinePlayer parseInputUnchecked(String string) {
public Result<OfflinePlayer, String> parseInputUnchecked(String string) {
// UUIDs are always 36 chars
if (string.length() == 36) {
try {
return Bukkit.getOfflinePlayer(UUID.fromString(string));
} catch (IllegalArgumentException ex) {
throw new IllegalArgumentException("Invalid UUID");
}
}
if (string.length() == 36)
return Results.ofCallable(() -> Bukkit.getOfflinePlayer(UUID.fromString(string)))
.mapFailure(_ -> "Invalid UUID.");
OfflinePlayer player = Bukkit.getPlayerExact(string);
var player = Bukkit.getPlayerExact(string);
if (player == null || (!player.hasPlayedBefore() && !player.isOnline()))
throw new IllegalArgumentException("Player not found");
return player;
return Results.failure("Player not found.");
return Results.success(player);
}
@Override

View file

@ -1,18 +1,32 @@
package de.kentoj.kencommandapi.type;
import com.leakyabstractions.result.api.Result;
import com.leakyabstractions.result.core.Results;
import de.kentoj.kencommandapi.api.argument.ArgumentType;
import de.kentoj.kencommandapi.api.suggestion.SuggestionProvider;
import de.kentoj.kencommandapi.suggestionprovider.PlayerSuggestionProvider;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.util.UUID;
public class PlayerArgumentType<T> implements ArgumentType<T, Player> {
@Override
public Player parseInputUnchecked(String string) {
var player = Bukkit.getPlayer(string);
if (player == null) throw new IllegalArgumentException("player not online");
return player;
public Result<Player, String> parseInputUnchecked(String input) {
// UUIDs are always 36 chars
Player player;
if (input.length() == 36) {
try {
player = Bukkit.getPlayer(UUID.fromString(input));
} catch (IllegalArgumentException _) {
return Results.failure("Invalid UUID.");
}
} else {
player = Bukkit.getPlayer(input);
}
return Results.ofNullable(player, "Player not online.");
}
@Override

View file

@ -1,5 +1,7 @@
package de.kentoj.kencommandapi.type;
import com.leakyabstractions.result.api.Result;
import com.leakyabstractions.result.core.Results;
import de.kentoj.kencommandapi.api.argument.ArgumentType;
import de.kentoj.kencommandapi.api.suggestion.SuggestionProvider;
import org.bukkit.Bukkit;
@ -10,21 +12,24 @@ import java.util.stream.Stream;
public class WorldArgumentType<T> implements ArgumentType<T, World> {
@Override
public World parseInputUnchecked(String input) throws IllegalArgumentException {
var world = Bukkit.getWorld(input);
if (world == null && input.length() == 36) {
public Result<World, String> parseInputUnchecked(String input) throws IllegalArgumentException {
World world;
if (input.length() == 36) {
try {
return Bukkit.getWorld(UUID.fromString(input));
world = Bukkit.getWorld(UUID.fromString(input));
} catch (IllegalArgumentException _) {
throw new IllegalArgumentException("World not found");
return Results.failure("Invalid UUID.");
}
} else {
world = Bukkit.getWorld(input);
}
return world;
return Results.ofNullable(world, "World not found");
}
@Override
public SuggestionProvider<T> getDefaultSuggestionProvider() {
return _ -> Stream.concat(
return (_, _) -> Stream.concat(
Bukkit.getWorlds().stream().map(World::getName),
Bukkit.getWorlds().stream().map(w -> w.getUID().toString())
).toList();