.
This commit is contained in:
parent
4879257f47
commit
4373584285
32 changed files with 492 additions and 199 deletions
|
|
@ -20,6 +20,7 @@ dependencies {
|
|||
|
||||
api("me.lucko:commodore:2.2")
|
||||
api("org.spigotmc:spigot-api:1.21.11-R0.1-SNAPSHOT")
|
||||
api("net.kyori:adventure-platform-bukkit:4.4.1")
|
||||
}
|
||||
|
||||
tasks.findByName("shadowJar")?.let {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package de.kentoj.scrow.bukkit;
|
|||
|
||||
import com.mongodb.reactivestreams.client.MongoDatabase;
|
||||
import de.kentoj.scrow.bukkit.services.EconomyService;
|
||||
import de.kentoj.scrow.bukkit.services.command.CommandManager;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
|
@ -15,6 +16,8 @@ public class ScrowAPI {
|
|||
private static @Nullable MongoDatabase database;
|
||||
@Getter
|
||||
private static EconomyService economyService;
|
||||
@Getter
|
||||
private static CommandManager commandManager;
|
||||
|
||||
@ApiStatus.Internal
|
||||
public static void setDatabase(@Nullable MongoDatabase database) {
|
||||
|
|
@ -25,5 +28,10 @@ public class ScrowAPI {
|
|||
public static void setEconomyService(EconomyService economyService) {
|
||||
ScrowAPI.economyService = economyService;
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
public static void setCommandManager(CommandManager commandManager) {
|
||||
ScrowAPI.commandManager = commandManager;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
package de.kentoj.scrow.bukkit.services.command;
|
||||
|
||||
import de.kentoj.scrow.bukkit.services.command.arg.ArgumentType;
|
||||
import lombok.Value;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
@Value
|
||||
public class CommandArgument<T> {
|
||||
int index;
|
||||
String name;
|
||||
ArgumentType<T> type;
|
||||
Function<CommandContext, T> defaultValue;
|
||||
}
|
||||
|
|
@ -1,16 +1,14 @@
|
|||
package de.kentoj.scrow.bukkit.services.old;
|
||||
package de.kentoj.scrow.bukkit.services.command;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public interface CmdContext {
|
||||
public interface CommandContext {
|
||||
|
||||
CommandSender getSender();
|
||||
|
||||
Player getSenderPlayer();
|
||||
|
||||
Entity getSenderEntity();
|
||||
|
||||
<T> T getArg(String key);
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
package de.kentoj.scrow.bukkit.services.command;
|
||||
|
||||
public interface CommandExecutionContext extends CommandContext {
|
||||
|
||||
<T> T getArg(String key);
|
||||
}
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
package de.kentoj.scrow.bukkit.services.old;
|
||||
package de.kentoj.scrow.bukkit.services.command;
|
||||
|
||||
public interface CommandExecutor {
|
||||
|
||||
/**
|
||||
* @return true on success, 1 on failure
|
||||
*/
|
||||
boolean execute(CmdContext ctx);
|
||||
void execute(CommandExecutionContext ctx);
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
package de.kentoj.scrow.bukkit.services.command;
|
||||
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
public interface CommandManager {
|
||||
|
||||
void register(CommandNode rootCommandNode, Plugin plugin);
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
package de.kentoj.scrow.bukkit.services.command;
|
||||
|
||||
import de.kentoj.scrow.bukkit.services.command.arg.ArgumentType;
|
||||
import org.bukkit.permissions.Permission;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
|
||||
// TODO javadoc
|
||||
public interface CommandNode {
|
||||
|
||||
<T> void addArg(String name, ArgumentType<T> type, @Nullable Function<CommandContext, T> defaultValue);
|
||||
|
||||
default <T> void addArg(String name, ArgumentType<T> type) {
|
||||
addArg(name, type, null);
|
||||
}
|
||||
|
||||
void addSubCommand(CommandNode subCommand);
|
||||
|
||||
void setPermission(@Nullable Permission permission);
|
||||
|
||||
default void setPermission(String permission) {
|
||||
setPermission(new Permission(permission));
|
||||
}
|
||||
|
||||
@Nullable Permission getPermission();
|
||||
|
||||
@Nullable CommandArgument<?> getArg(int index);
|
||||
|
||||
List<CommandNode> getSubCommands();
|
||||
|
||||
String getName();
|
||||
|
||||
String[] getAliases();
|
||||
|
||||
String getDescription();
|
||||
|
||||
@Nullable CommandExecutor getExecutor();
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
package de.kentoj.scrow.bukkit.services.command.arg;
|
||||
|
||||
public interface ArgumentType<S> {
|
||||
|
||||
S parseInput(String str);
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.kentoj.scrow.bukkit.services.old.arg;
|
||||
package de.kentoj.scrow.bukkit.services.command.arg;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
|
@ -10,9 +10,9 @@ import java.util.UUID;
|
|||
|
||||
// FIXME module stuff
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class PlayerArgType {
|
||||
public class PlayerArgumentType {
|
||||
|
||||
public static final CmdArg<Player> player = str -> {
|
||||
public static final ArgumentType<Player> player = str -> {
|
||||
if (str.length() == 36) {
|
||||
var uuid = UUID.fromString(str);
|
||||
return Bukkit.getPlayer(uuid);
|
||||
|
|
@ -21,7 +21,7 @@ public class PlayerArgType {
|
|||
}
|
||||
};
|
||||
|
||||
public static final CmdArg<OfflinePlayer> offlinePlayer = str -> {
|
||||
public static final ArgumentType<OfflinePlayer> offlinePlayer = str -> {
|
||||
var uuid = UUID.fromString(str);
|
||||
return Bukkit.getOfflinePlayer(uuid);
|
||||
};
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
package de.kentoj.scrow.bukkit.services.old;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
public interface CommandsService {
|
||||
|
||||
void register(Plugin plugin, Command command);
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
package de.kentoj.scrow.bukkit.services.old;
|
||||
|
||||
import de.kentoj.scrow.bukkit.services.old.arg.CmdArg;
|
||||
import lombok.Value;
|
||||
|
||||
@Value
|
||||
public class RegisteredCmdArg<T> {
|
||||
int index;
|
||||
String key;
|
||||
CmdArg<T> arg;
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
package de.kentoj.scrow.bukkit.services.old;
|
||||
|
||||
import org.bukkit.permissions.Permission;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface SCommand {
|
||||
|
||||
@Nullable Permission getPermission();
|
||||
|
||||
RegisteredCmdArg<?> getArg(int index);
|
||||
|
||||
List<SCommand> getSubCommands();
|
||||
|
||||
String[] getLabels();
|
||||
|
||||
String getDescription();
|
||||
|
||||
@Nullable CommandExecutor getExecutor();
|
||||
}
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
package de.kentoj.scrow.bukkit.services.old.arg;
|
||||
|
||||
public interface CmdArg<S> {
|
||||
|
||||
S parseInput(String str);
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
package de.kentoj.scrow.bukkit.util.chat;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import net.kyori.adventure.audience.Audience;
|
||||
import net.kyori.adventure.audience.Audiences;
|
||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class ErrorMessage {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
package de.kentoj.scrow.bukkit.util.command;
|
||||
|
||||
import com.mojang.brigadier.LiteralMessage;
|
||||
import com.mojang.brigadier.context.CommandContext;
|
||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class PlayerArgument {
|
||||
|
||||
public static Player resolve(CommandContext<Object> ctx, String argumentName) throws CommandSyntaxException {
|
||||
var str = ctx.getArgument(argumentName, String.class);
|
||||
boolean isUUID = str.length() == 36;
|
||||
return isUUID ? Bukkit.getPlayer(parseUUID(str)) : Bukkit.getPlayerExact(str);
|
||||
}
|
||||
|
||||
private static UUID parseUUID(String string) throws CommandSyntaxException {
|
||||
try {
|
||||
return UUID.fromString(string);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
throw new SimpleCommandExceptionType(new LiteralMessage("Invalid UUID")).create();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue