This commit is contained in:
kento2 2026-07-05 23:28:41 +02:00
parent 76f4ba2ec9
commit ac804b6c5b
13 changed files with 140 additions and 95 deletions

137
.idea/workspace.xml generated
View file

@ -5,11 +5,23 @@
</component>
<component name="ChangeListManager">
<list default="true" id="6414223f-1761-4683-97f5-9dab59d6c44a" name="Changes" comment=".">
<change afterPath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/scrow/ScrowPublishConvention.kt" afterDir="false" />
<change afterPath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/scrow/configureScrowRepo.kt" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/TODO" beforeDir="false" afterPath="$PROJECT_DIR$/TODO" afterDir="false" />
<change beforePath="$PROJECT_DIR$/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/build.gradle.kts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/kencommandapi-bukkit/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-bukkit/build.gradle.kts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/kencommandapi-core/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-core/build.gradle.kts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/CommandHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/CommandHandler.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/argument/CommandArgument.java" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/argument/CommandArgument.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/CommandParser.java" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/CommandParser.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/ParseResult.java" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/ParseResult.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/suggestion/SuggestionProvider.java" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/suggestion/SuggestionProvider.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/internal/CommandArgumentImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/internal/CommandArgumentImpl.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/kencommandapi-velocity/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-velocity/build.gradle.kts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/settings.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/settings.gradle.kts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../build-logic/convention/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/../build-logic/convention/build.gradle.kts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/scrow/ScrowRepositoryConvention.kt" beforeDir="false" afterPath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/scrow/ScrowRepositoryConvention.kt" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -48,6 +60,19 @@
<item name="KenCommandAPI" type="f1a62948:ProjectNode" />
<item name="KenCommandAPI" type="2d1252cf:ModuleNode" />
</path>
<path>
<item name="" type="6a2764b6:ExternalProjectsStructure$RootNode" />
<item name="KenCommandAPI" type="f1a62948:ProjectNode" />
<item name="KenCommandAPI" type="2d1252cf:ModuleNode" />
<item name="Tasks" type="e4a08cd1:TasksNode" />
</path>
<path>
<item name="" type="6a2764b6:ExternalProjectsStructure$RootNode" />
<item name="KenCommandAPI" type="f1a62948:ProjectNode" />
<item name="KenCommandAPI" type="2d1252cf:ModuleNode" />
<item name="Tasks" type="e4a08cd1:TasksNode" />
<item name="publishing" type="c8890929:TasksNode$1" />
</path>
</expand>
<select />
</tree_state>
@ -84,37 +109,38 @@
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;Gradle./home/a/src/kento2/KenCommandAPI/kencommandapi-core [:kencommandapi-core:de.kentoj.kencommandapi.Main.main()].executor&quot;: &quot;Run&quot;,
&quot;Gradle./home/a/src/kento2/KenCommandAPI/kencommandapi-core [build].executor&quot;: &quot;Run&quot;,
&quot;Gradle./home/a/src/kento2/KenCommandAPI/kencommandapi-core [publish].executor&quot;: &quot;Run&quot;,
&quot;Gradle.Download Sources.executor&quot;: &quot;Run&quot;,
&quot;Gradle.KenCommandAPI [:de.kencommand.Main.main()].executor&quot;: &quot;Run&quot;,
&quot;Gradle.KenCommandAPI [assemble].executor&quot;: &quot;Run&quot;,
&quot;Gradle.KenCommandAPI [build].executor&quot;: &quot;Run&quot;,
&quot;Gradle.KenCommandAPI [clean].executor&quot;: &quot;Run&quot;,
&quot;Gradle.KenCommandAPI [publishAllPublicationsToScrowRepository].executor&quot;: &quot;Run&quot;,
&quot;Gradle.KenCommandAPI [publish].executor&quot;: &quot;Run&quot;,
&quot;Gradle.KenCommandAPI:kencommandapi-bukkit [build].executor&quot;: &quot;Run&quot;,
&quot;Gradle.KenCommandAPI:kencommandapi-bukkit [generatePomFileForKenCommandAPIBukkitPublication].executor&quot;: &quot;Run&quot;,
&quot;Gradle.KenCommandAPI:kencommandapi-bukkit [publishAllPublicationsToScrowRepository].executor&quot;: &quot;Run&quot;,
&quot;Gradle.KenCommandAPI:kencommandapi-bukkit [publish].executor&quot;: &quot;Run&quot;,
&quot;Gradle.KenCommandAPI:kencommandapi-velocity [publish].executor&quot;: &quot;Run&quot;,
&quot;Gradle.kencommandapi-core [build].executor&quot;: &quot;Run&quot;,
&quot;ModuleVcsDetector.initialDetectionPerformed&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252&quot;: &quot;true&quot;,
&quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;,
&quot;git-widget-placeholder&quot;: &quot;master&quot;,
&quot;kotlin-language-version-configured&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;/home/a/src/scrow/KenCommandAPI/kencommandapi-core&quot;,
&quot;project.structure.last.edited&quot;: &quot;Modules&quot;,
&quot;project.structure.proportion&quot;: &quot;0.15&quot;,
&quot;project.structure.side.proportion&quot;: &quot;0.6268199&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;preferences.pluginManager&quot;
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"Gradle./home/a/src/kento2/KenCommandAPI/kencommandapi-core [:kencommandapi-core:de.kentoj.kencommandapi.Main.main()].executor": "Run",
"Gradle./home/a/src/kento2/KenCommandAPI/kencommandapi-core [build].executor": "Run",
"Gradle./home/a/src/kento2/KenCommandAPI/kencommandapi-core [publish].executor": "Run",
"Gradle.Download Sources.executor": "Run",
"Gradle.KenCommandAPI [:de.kencommand.Main.main()].executor": "Run",
"Gradle.KenCommandAPI [assemble].executor": "Run",
"Gradle.KenCommandAPI [buildEnvironment].executor": "Run",
"Gradle.KenCommandAPI [build].executor": "Run",
"Gradle.KenCommandAPI [clean].executor": "Run",
"Gradle.KenCommandAPI [publishAllPublicationsToScrowRepository].executor": "Run",
"Gradle.KenCommandAPI [publish].executor": "Run",
"Gradle.KenCommandAPI:kencommandapi-bukkit [build].executor": "Run",
"Gradle.KenCommandAPI:kencommandapi-bukkit [generatePomFileForKenCommandAPIBukkitPublication].executor": "Run",
"Gradle.KenCommandAPI:kencommandapi-bukkit [publishAllPublicationsToScrowRepository].executor": "Run",
"Gradle.KenCommandAPI:kencommandapi-bukkit [publish].executor": "Run",
"Gradle.KenCommandAPI:kencommandapi-velocity [publish].executor": "Run",
"Gradle.kencommandapi-core [build].executor": "Run",
"ModuleVcsDetector.initialDetectionPerformed": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
"RunOnceActivity.git.unshallow": "true",
"git-widget-placeholder": "master",
"kotlin-language-version-configured": "true",
"last_opened_file_path": "/home/a/src/scrow/KenCommandAPI/kencommandapi-core",
"project.structure.last.edited": "Modules",
"project.structure.proportion": "0.15",
"project.structure.side.proportion": "0.6268199",
"settings.editor.selected.configurable": "preferences.pluginManager"
}
}</component>
}]]></component>
<component name="RecentsManager">
<key name="CreateClassDialog.RecentsKey">
<recent name="de.kentoj.kencommandapi.api" />
@ -143,9 +169,32 @@
<option name="myCommands">
<command value="publishAll" />
<command value="KenCommandAPI [publishAllPublicationsToScrowRepository]" />
<command value="gradlew buildEnvironment" />
</option>
</component>
<component name="RunManager" selected="Gradle.KenCommandAPI [publishAllPublicationsToScrowRepository]">
<component name="RunManager" selected="Gradle.KenCommandAPI [publish]">
<configuration name="KenCommandAPI [buildEnvironment]" type="GradleRunConfiguration" factoryName="Gradle" temporary="true">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="buildEnvironment" />
</list>
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<RunAsTest>false</RunAsTest>
<method v="2" />
</configuration>
<configuration name="KenCommandAPI [build]" type="GradleRunConfiguration" factoryName="Gradle" temporary="true">
<ExternalSystemSettings>
<option name="executionName" />
@ -234,35 +283,13 @@
<RunAsTest>false</RunAsTest>
<method v="2" />
</configuration>
<configuration name="KenCommandAPI:kencommandapi-velocity [publish]" type="GradleRunConfiguration" factoryName="Gradle" temporary="true">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$/kencommandapi-velocity" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="publish" />
</list>
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<RunAsTest>false</RunAsTest>
<method v="2" />
</configuration>
<recent_temporary>
<list>
<item itemvalue="Gradle.KenCommandAPI [publish]" />
<item itemvalue="Gradle.KenCommandAPI [publishAllPublicationsToScrowRepository]" />
<item itemvalue="Gradle.KenCommandAPI [build]" />
<item itemvalue="Gradle.KenCommandAPI [buildEnvironment]" />
<item itemvalue="Gradle.KenCommandAPI [clean]" />
<item itemvalue="Gradle.KenCommandAPI:kencommandapi-velocity [publish]" />
<item itemvalue="Gradle.KenCommandAPI [publish]" />
</list>
</recent_temporary>
</component>

1
TODO
View file

@ -1,3 +1,4 @@
- use version catalog
- fix missing ArgumentExpected error at first arg or smth (maybe all args are shifted ???)
- make sure permissions of literals work
- fix suggestions/tab completion

View file

@ -1,5 +1,5 @@
group = "de.kentoj.scrow"
version = "0.30"
version = "0.31"
subprojects {
group = rootProject.group

View file

@ -1,9 +1,8 @@
plugins {
id("java")
id("maven-publish")
id("de.kentoj.scrow.scrow-repository")
id("de.kentoj.scrow.base-dependencies")
id("de.kentoj.scrow.java-library")
id("scrow.scrow-publish")
id("scrow.base-dependencies")
id("scrow.java-library")
}
repositories {

View file

@ -1,9 +1,8 @@
plugins {
id("java")
id("maven-publish")
id("de.kentoj.scrow.scrow-repository")
id("de.kentoj.scrow.base-dependencies")
id("de.kentoj.scrow.java-library")
id("scrow.scrow-publish")
id("scrow.base-dependencies")
id("scrow.java-library")
}
repositories {

View file

@ -47,9 +47,9 @@ public class CommandHandler<T> {
String filter = null;
if (parseResult instanceof ParseResult.UnknownLiteral<T>)
filter = ((ParseResult.UnknownLiteral<T>) parseResult).getName();
filter = ((ParseResult.UnknownLiteral<T>) parseResult).getInput();
else if (parseResult instanceof ParseResult.NoPermission<T>)
filter = ((ParseResult.NoPermission<T>) parseResult).getName();
filter = ((ParseResult.NoPermission<T>) parseResult).getInput();
return getSuggestions(sender, parseResult.getLiteral(), filter);
}

View file

@ -17,7 +17,7 @@ public interface CommandArgument<T, V> {
ArgumentType<T, V> getType();
void setDefaultValueProvider(@Nullable Function<T, V> getDefaultValueProvider);
void setDefaultValueProvider(@Nullable Function<T, V> defaultValueProvider);
@Nullable Function<T, V> getDefaultValueProvider();

View file

@ -4,9 +4,9 @@ import com.leakyabstractions.result.api.Result;
import com.leakyabstractions.result.core.Results;
import de.kentoj.kencommandapi.api.argument.CommandArgument;
import de.kentoj.kencommandapi.api.invocation.ParsedArgument;
import de.kentoj.kencommandapi.api.platform.HasPermissionMethod;
import de.kentoj.kencommandapi.api.node.CommandNode;
import de.kentoj.kencommandapi.api.node.RootCommandNode;
import de.kentoj.kencommandapi.api.platform.HasPermissionMethod;
import de.kentoj.kencommandapi.internal.ParsedArgumentImpl;
import lombok.RequiredArgsConstructor;
@ -62,36 +62,41 @@ public class CommandParser<T> {
T sender,
boolean parseArgs
) {
Object value;
if (args.hasNext()) {
var argStr = getRawArgument(args, nodeArg);
if (!parseArgs) {
value = null;
} else {
try {
value = nodeArg.getType().parseInput(argStr);
} catch (IllegalArgumentException ex) {
return Results.failure(new ParseResult.IllegalArgument<>(node, nodeArg, ex.getMessage(), argStr));
}
}
} else {
if (!args.hasNext()) {
if (nodeArg.getDefaultValueProvider() == null)
return Results.failure(new ParseResult.ArgumentExpected<>(node, nodeArg));
value = nodeArg.getDefaultValueProvider().apply(sender);
var value = nodeArg.getDefaultValueProvider().apply(sender);
return Results.success(toParsed(value, nodeArg));
}
Object value = null;
var argStr = getRawArgument(args, nodeArg);
if (parseArgs) {
try {
value = nodeArg.getType().parseInput(argStr);
} catch (IllegalArgumentException ex) {
return Results.failure(new ParseResult.IllegalArgument<>(node, nodeArg, ex.getMessage(), argStr));
}
}
var parsedArg = new ParsedArgumentImpl<>(value, (CommandArgument<T, Object>) nodeArg);
return Results.success(parsedArg);
}
@SuppressWarnings("unchecked")
private ParsedArgument<T, Object> toParsed(Object value, CommandArgument<T, ?> arg) {
return new ParsedArgumentImpl<>(value, (CommandArgument<T, Object>) arg);
}
private String getRawArgument(Iterator<String> args, CommandArgument<T, ?> arg) {
StringBuilder rawArgument = new StringBuilder();
if (arg.getType().isGreedy()) {
while (args.hasNext()) {
rawArgument.append(" ");
rawArgument.append(args.next());
}
rawArgument.deleteCharAt(0);
} else {
rawArgument = new StringBuilder(args.next());
}

View file

@ -35,11 +35,11 @@ public abstract sealed class ParseResult<T> permits ParseResult.IllegalArgument,
public static final class UnknownLiteral<T> extends ParseResult<T> {
private final CommandNode<T> previousLiteral;
@Getter
private final String name;
private final String input;
@Override
public String getMessage() {
return "Unknown subcommand: " + name;
return "Unknown subcommand: " + input;
}
@Override
@ -77,11 +77,11 @@ public abstract sealed class ParseResult<T> permits ParseResult.IllegalArgument,
@Getter
private final CommandNode<T> literal;
@Getter
private final String name;
private final String input;
@Override
public String getMessage() {
return "Unknown subcommand: " + name;
return "Unknown subcommand: " + input;
}
}

View file

@ -6,7 +6,7 @@ import java.util.concurrent.CompletableFuture;
public interface SuggestionProvider<T> {
/**
* @return an unfiltered(no permission checks or filtering by input) list of strings that may be used for the argument
* @return an unfiltered(no permission checks or filtering by input) list of strings that may be used for the argument/literal
*/
List<String> suggest(T sender);
}

View file

@ -21,8 +21,7 @@ public class CommandArgumentImpl<T, V> implements CommandArgument<T, V> {
@Getter
@Setter
private @Nullable Function<T, V> defaultValueProvider;
private @Nullable Function<T, V> defaultValueProvider = null;
@Setter
private @Nullable SuggestionProvider<T> suggestionProvider;

View file

@ -1,9 +1,8 @@
plugins {
id("java")
id("maven-publish")
id("de.kentoj.scrow.scrow-repository")
id("de.kentoj.scrow.base-dependencies")
id("de.kentoj.scrow.java-library")
id("scrow.scrow-publish")
id("scrow.base-dependencies")
id("scrow.java-library")
}
repositories {

View file

@ -1,6 +1,22 @@
pluginManagement {
includeBuild("../build-logic")
}
plugins {
id("scrow.scrow-repository")
}
dependencyResolutionManagement {
repositories {
maven {
name = "papermc"
url = uri("https://repo.papermc.io/repository/maven-public/")
}
}
}
rootProject.name = "KenCommandAPI"
includeBuild("../build-logic")
include("kencommandapi-core")
include("kencommandapi-bukkit")
include("kencommandapi-velocity")