This commit is contained in:
kento2 2026-02-16 17:54:10 +01:00
parent 4879257f47
commit 4373584285
32 changed files with 492 additions and 199 deletions

View file

@ -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 {

View file

@ -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;
}
}

View file

@ -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;
}

View file

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

View file

@ -0,0 +1,6 @@
package de.kentoj.scrow.bukkit.services.command;
public interface CommandExecutionContext extends CommandContext {
<T> T getArg(String key);
}

View file

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

View file

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

View file

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

View file

@ -0,0 +1,6 @@
package de.kentoj.scrow.bukkit.services.command.arg;
public interface ArgumentType<S> {
S parseInput(String str);
}

View file

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

View file

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

View file

@ -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;
}

View file

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

View file

@ -1,6 +0,0 @@
package de.kentoj.scrow.bukkit.services.old.arg;
public interface CmdArg<S> {
S parseInput(String str);
}

View file

@ -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 {
}

View file

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