add some argument types
This commit is contained in:
parent
f946566048
commit
62151736bd
7 changed files with 193 additions and 1 deletions
|
|
@ -0,0 +1,17 @@
|
||||||
|
package site.lab0x13.scrow.commands.bukkit.suggestionprovider;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import site.lab0x13.scrow.commands.model.CommandContext;
|
||||||
|
import site.lab0x13.scrow.commands.model.SuggestionProvider;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public final class PlayerSuggestionProvider<C extends CommandContext<C>> implements SuggestionProvider<C> {
|
||||||
|
@Override
|
||||||
|
public List<String> suggest(C __, String ___) {
|
||||||
|
return Bukkit.getOnlinePlayers().stream()
|
||||||
|
.map(Player::getName)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
package site.lab0x13.scrow.commands.bukkit.type;
|
||||||
|
|
||||||
|
import com.leakyabstractions.result.api.Result;
|
||||||
|
import com.leakyabstractions.result.core.Results;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import site.lab0x13.scrow.commands.bukkit.suggestionprovider.PlayerSuggestionProvider;
|
||||||
|
import site.lab0x13.scrow.commands.model.CommandContext;
|
||||||
|
import site.lab0x13.scrow.commands.model.SuggestionProvider;
|
||||||
|
import site.lab0x13.scrow.commands.model.argument.ArgumentType;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class OfflinePlayerArgumentType<C extends CommandContext<C>> implements ArgumentType<C, OfflinePlayer> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result<OfflinePlayer, String> parseInput(String string) {
|
||||||
|
// UUIDs are always 36 chars
|
||||||
|
if (string.length() == 36)
|
||||||
|
return Results.ofCallable(() -> Bukkit.getOfflinePlayer(UUID.fromString(string)))
|
||||||
|
.mapFailure(_ -> "Invalid UUID.");
|
||||||
|
|
||||||
|
var player = Bukkit.getPlayerExact(string);
|
||||||
|
if (player == null || (!player.hasPlayedBefore() && !player.isOnline()))
|
||||||
|
return Results.failure("Player not found.");
|
||||||
|
return Results.success(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SuggestionProvider<C> defaultSuggestionProvider() {
|
||||||
|
return new PlayerSuggestionProvider<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
package site.lab0x13.scrow.commands.bukkit.type;
|
||||||
|
|
||||||
|
import com.leakyabstractions.result.api.Result;
|
||||||
|
import com.leakyabstractions.result.core.Results;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import site.lab0x13.scrow.commands.bukkit.suggestionprovider.PlayerSuggestionProvider;
|
||||||
|
import site.lab0x13.scrow.commands.model.CommandContext;
|
||||||
|
import site.lab0x13.scrow.commands.model.SuggestionProvider;
|
||||||
|
import site.lab0x13.scrow.commands.model.argument.ArgumentType;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class PlayerArgumentType<C extends CommandContext<C>> implements ArgumentType<C, Player> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result<Player, String> parseInput(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
|
||||||
|
public SuggestionProvider<C> defaultSuggestionProvider() {
|
||||||
|
return new PlayerSuggestionProvider<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
package site.lab0x13.scrow.commands.bukkit.type;
|
||||||
|
|
||||||
|
import com.leakyabstractions.result.api.Result;
|
||||||
|
import com.leakyabstractions.result.core.Results;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import site.lab0x13.scrow.commands.model.CommandContext;
|
||||||
|
import site.lab0x13.scrow.commands.model.SuggestionProvider;
|
||||||
|
import site.lab0x13.scrow.commands.model.argument.ArgumentType;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
public class WorldArgumentType<C extends CommandContext<C>> implements ArgumentType<C, World> {
|
||||||
|
@Override
|
||||||
|
public Result<World, String> parseInput(String input) {
|
||||||
|
World world;
|
||||||
|
if (input.length() == 36) {
|
||||||
|
try {
|
||||||
|
world = Bukkit.getWorld(UUID.fromString(input));
|
||||||
|
} catch (IllegalArgumentException _) {
|
||||||
|
return Results.failure("Invalid UUID.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
world = Bukkit.getWorld(input);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Results.ofNullable(world, "World not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SuggestionProvider<C> defaultSuggestionProvider() {
|
||||||
|
return (_, _) -> Stream.concat(
|
||||||
|
Bukkit.getWorlds().stream().map(World::getName),
|
||||||
|
Bukkit.getWorlds().stream().map(w -> w.getUID().toString())
|
||||||
|
).toList();
|
||||||
|
}
|
||||||
|
}
|
||||||
2
defs.bzl
2
defs.bzl
|
|
@ -1,2 +1,2 @@
|
||||||
GROUP = "site.lab0x13.scrow"
|
GROUP = "site.lab0x13.scrow"
|
||||||
VERSION = "0.5"
|
VERSION = "0.6"
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
package suggestionprovider;
|
||||||
|
|
||||||
|
import com.velocitypowered.api.proxy.Player;
|
||||||
|
import com.velocitypowered.api.proxy.ProxyServer;
|
||||||
|
import site.lab0x13.scrow.commands.model.CommandContext;
|
||||||
|
import site.lab0x13.scrow.commands.model.SuggestionProvider;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public final class PlayerSuggestionProvider<C extends CommandContext<C>> implements SuggestionProvider<C> {
|
||||||
|
|
||||||
|
private final ProxyServer proxyServer;
|
||||||
|
|
||||||
|
public PlayerSuggestionProvider(ProxyServer proxyServer) {
|
||||||
|
this.proxyServer = proxyServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> suggest(C __, String ___) {
|
||||||
|
return proxyServer.getAllPlayers().stream()
|
||||||
|
.map(Player::getUsername)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
package type;
|
||||||
|
|
||||||
|
import com.leakyabstractions.result.api.Result;
|
||||||
|
import com.leakyabstractions.result.core.Results;
|
||||||
|
import com.velocitypowered.api.command.CommandSource;
|
||||||
|
import com.velocitypowered.api.proxy.Player;
|
||||||
|
import com.velocitypowered.api.proxy.ProxyServer;
|
||||||
|
import site.lab0x13.scrow.commands.model.CommandContext;
|
||||||
|
import site.lab0x13.scrow.commands.model.SuggestionProvider;
|
||||||
|
import site.lab0x13.scrow.commands.model.argument.ArgumentType;
|
||||||
|
import suggestionprovider.PlayerSuggestionProvider;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class PlayerArgumentType<C extends CommandSource & CommandContext<C>> implements ArgumentType<C, Player> {
|
||||||
|
|
||||||
|
private final ProxyServer server;
|
||||||
|
|
||||||
|
public PlayerArgumentType(ProxyServer server) {
|
||||||
|
this.server = server;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result<Player, String> parseInput(String input) {
|
||||||
|
Player player;
|
||||||
|
if (input.length() == 36) {
|
||||||
|
try {
|
||||||
|
player = server.getPlayer(UUID.fromString(input)).orElse(null);
|
||||||
|
} catch (IllegalArgumentException _) {
|
||||||
|
return Results.failure("Invalid UUID.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
player = server.getPlayer(input).orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Results.ofNullable(player, "Player not online.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SuggestionProvider<C> defaultSuggestionProvider() {
|
||||||
|
return new PlayerSuggestionProvider<>(server);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue