Skip to content

Commit

Permalink
Fix resource location based commands failing to serialize to the clie…
Browse files Browse the repository at this point in the history
…nt properly
  • Loading branch information
NickImpact committed Oct 23, 2023
1 parent bc58ea2 commit dcab3a3
Show file tree
Hide file tree
Showing 9 changed files with 55 additions and 88 deletions.
2 changes: 1 addition & 1 deletion impactor/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ dependencies {
api(project(":api:text"))
api(project(":api:translations"))

api("net.impactdev.impactor.api:commands:5.1.1+1.19.4-SNAPSHOT") {
api("net.impactdev.impactor.api:commands:5.1.1+1.20.1-SNAPSHOT") {
exclude("net.impactdev.impactor.api", "core")
exclude("net.impactdev.impactor.api", "items")
exclude("net.impactdev.impactor.api", "players")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,11 @@

import cloud.commandframework.annotations.AnnotationParser;
import cloud.commandframework.annotations.processing.CommandContainer;
import cloud.commandframework.arguments.parser.ParserParameter;
import cloud.commandframework.arguments.parser.ParserParameters;
import cloud.commandframework.arguments.parser.StandardParameters;
import cloud.commandframework.arguments.standard.StringArgument;
import cloud.commandframework.meta.CommandMeta;
import cloud.commandframework.meta.SimpleCommandMeta;
import com.google.common.collect.Lists;
import cloud.commandframework.minecraft.extras.MinecraftHelp;
import io.github.classgraph.ClassGraph;
import io.github.classgraph.ClassInfo;
import io.github.classgraph.ClassInfoList;
Expand All @@ -41,9 +40,9 @@
import net.impactdev.impactor.api.Impactor;
import net.impactdev.impactor.api.commands.CommandSource;
import net.impactdev.impactor.api.commands.ImpactorCommandManager;
import net.impactdev.impactor.api.commands.brigadier.BrigadierMapper;
import net.impactdev.impactor.api.economy.currency.Currency;
import net.impactdev.impactor.api.platform.sources.PlatformSource;
import net.impactdev.impactor.api.utility.ExceptionPrinter;
import net.impactdev.impactor.core.commands.events.RegisterCommandsEvent;
import net.impactdev.impactor.core.commands.parsers.ActivePaginationParser;
import net.impactdev.impactor.core.commands.parsers.CurrencyParser;
Expand All @@ -52,10 +51,12 @@
import net.impactdev.impactor.core.plugin.BaseImpactorPlugin;
import net.impactdev.impactor.core.text.pagination.ActivePagination;
import net.impactdev.impactor.core.utility.events.EventPublisher;
import net.kyori.adventure.key.Key;

import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.stream.Collectors;

public final class ImpactorCommandRegistry {
Expand All @@ -72,6 +73,22 @@ public ImpactorCommandManager manager() {
public void registerAllCommands() {
AnnotationParser<CommandSource> parser = this.createParser();
EventPublisher.post(new RegisterCommandsEvent(parser));

MinecraftHelp<CommandSource> helper = new MinecraftHelp<>(
"/impactor help",
CommandSource::source,
this.manager().delegate()
);

this.manager().delegate().command(this.manager()
.delegate()
.commandBuilder("impactor")
.literal("help")
.argument(StringArgument.optional("query", StringArgument.StringMode.GREEDY))
.handler(context -> {
helper.queryCommands(Objects.requireNonNull(context.getOrDefault("query", "")), context.getSender());
})
);
}

public void registerArgumentParsers() {
Expand All @@ -94,6 +111,9 @@ public void registerArgumentParsers() {
TypeToken.get(ActivePagination.class),
options -> new ActivePaginationParser()
);

BrigadierMapper mapper = this.manager().mapper();
mapper.map(Key.key("minecraft", "resource_location"), TypeToken.get(CurrencyParser.class));
}

private AnnotationParser<CommandSource> createParser() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,14 +152,11 @@ public void construct() {
ImpactorCommandRegistry registry = new ImpactorCommandRegistry();
registry.registerArgumentParsers();
registry.registerAllCommands();
this.registerCommandMappings(registry);

this.logger().info("Setting up plugin integrations...");
this.integrate();
}

protected abstract void registerCommandMappings(ImpactorCommandRegistry registry);

public void setup() {
this.bootstrapper.logger().info("Initializing modules...");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,18 +170,22 @@ public final class ImpactorPlaceholders {
case "source":
String st = arguments.pop();
switch (st) {
case "before":
case "before" -> {
return currency.format(context.from().before());
case "after":
}
case "after" -> {
return currency.format(context.from().after());
}
}
case "recipient":
String rt = arguments.pop();
switch (rt) {
case "before":
case "before" -> {
return currency.format(context.to().before());
case "after":
}
case "after" -> {
return currency.format(context.to().after());
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,6 @@ public TestPlugin(ImpactorBootstrapper bootstrapper) {
super(bootstrapper);
}

@Override
protected void registerCommandMappings(ImpactorCommandRegistry registry) {

}

@Override
protected Set<Class<? extends ImpactorModule>> modules() {
return Sets.newHashSet(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,19 @@
package net.impactdev.impactor.test.dummies;

import cloud.commandframework.CommandManager;
import cloud.commandframework.arguments.parser.ArgumentParser;
import cloud.commandframework.execution.CommandExecutionCoordinator;
import cloud.commandframework.extra.confirmation.CommandConfirmationManager;
import cloud.commandframework.internal.CommandRegistrationHandler;
import cloud.commandframework.meta.CommandMeta;
import cloud.commandframework.meta.SimpleCommandMeta;
import io.leangen.geantyref.TypeToken;
import net.impactdev.impactor.api.commands.CommandSource;
import net.impactdev.impactor.api.commands.ImpactorCommandManager;
import net.impactdev.impactor.api.commands.brigadier.BrigadierMapper;
import net.impactdev.impactor.api.logging.PluginLogger;
import net.impactdev.impactor.api.platform.plugins.PluginMetadata;
import net.kyori.adventure.key.Key;
import org.checkerframework.checker.nullness.qual.NonNull;

public class TestCommandManagerFactory implements ImpactorCommandManager.Factory {
Expand Down Expand Up @@ -65,6 +69,16 @@ public boolean hasPermission(@NonNull CommandSource sender, @NonNull String perm
};
}

@Override
public BrigadierMapper mapper() {
return new BrigadierMapper() {
@Override
public <T extends ArgumentParser<CommandSource, ?>> void map(Key key, TypeToken<T> type, boolean useCloudSuggestions) {

}
};
}

@Override
public CommandConfirmationManager<CommandSource> confirmations() {
return null;
Expand Down
9 changes: 8 additions & 1 deletion launchers/fabric/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ dependencies {
listOf(
"fabric-lifecycle-events-v1",
"fabric-command-api-v2",
"fabric-networking-api-v1"
"fabric-networking-api-v1",
).forEach { modImplementation(fabricApi.module(it, rootProject.property("fabric-api").toString())) }

implementation(project(":minecraft:impl"))
Expand All @@ -47,6 +47,7 @@ dependencies {
modCompileOnly("eu.pb4:placeholder-api:2.0.0-pre.1+1.19.2")
include("io.leangen.geantyref:geantyref:1.3.13")

modRuntimeOnly("me.lucko:fabric-permissions-api:0.2-SNAPSHOT")
testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.1")
}
Expand Down Expand Up @@ -108,4 +109,10 @@ modrinth {
required.project("fabric-api")
optional.project("placeholder-api")
}
}

configurations.all {
resolutionStrategy {
force("net.fabricmc:fabric-loader:${rootProject.property("fabric-loader")}")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,25 +25,15 @@

package net.impactdev.impactor.fabric;

import cloud.commandframework.arguments.standard.StringArgument;
import cloud.commandframework.brigadier.argument.WrappedBrigadierParser;
import cloud.commandframework.minecraft.extras.MinecraftHelp;
import io.leangen.geantyref.TypeToken;
import net.impactdev.impactor.api.commands.CommandSource;
import net.impactdev.impactor.api.plugin.ImpactorPlugin;
import net.impactdev.impactor.core.commands.ImpactorCommandRegistry;
import net.impactdev.impactor.core.commands.parsers.CurrencyParser;
import net.impactdev.impactor.core.modules.ImpactorModule;
import net.impactdev.impactor.core.plugin.ImpactorBootstrapper;
import net.impactdev.impactor.fabric.commands.FabricCommandManager;
import net.impactdev.impactor.fabric.commands.FabricCommandModule;
import net.impactdev.impactor.fabric.platform.FabricPlatformModule;
import net.impactdev.impactor.fabric.scheduler.FabricSchedulerModule;
import net.impactdev.impactor.fabric.ui.FabricUIModule;
import net.impactdev.impactor.minecraft.plugin.GameImpactorPlugin;
import net.minecraft.commands.arguments.ResourceLocationArgument;

import java.util.Objects;
import java.util.Set;

public final class FabricImpactorPlugin extends GameImpactorPlugin implements ImpactorPlugin {
Expand All @@ -57,31 +47,6 @@ public void construct() {
super.construct();
}

@Override
protected void registerCommandMappings(ImpactorCommandRegistry registry) {
FabricCommandManager manager = (FabricCommandManager) registry.manager();
manager.delegate().parserRegistry().registerParserSupplier(
TypeToken.get(CurrencyParser.class),
params -> new WrappedBrigadierParser<>(ResourceLocationArgument.id())
);

MinecraftHelp<CommandSource> helper = new MinecraftHelp<>(
"/impactor help",
CommandSource::source,
registry.manager().delegate()
);

registry.manager().delegate().command(registry.manager()
.delegate()
.commandBuilder("impactor")
.literal("help")
.argument(StringArgument.optional("query", StringArgument.StringMode.GREEDY))
.handler(context -> {
helper.queryCommands(Objects.requireNonNull(context.getOrDefault("query", "")), context.getSender());
})
);
}

@Override
protected Set<Class<? extends ImpactorModule>> modules() {
Set<Class<? extends ImpactorModule>> parent = super.modules();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,25 +25,15 @@

package net.impactdev.impactor.forge;

import cloud.commandframework.arguments.standard.StringArgument;
import cloud.commandframework.brigadier.argument.WrappedBrigadierParser;
import cloud.commandframework.minecraft.extras.MinecraftHelp;
import io.leangen.geantyref.TypeToken;
import net.impactdev.impactor.api.commands.CommandSource;
import net.impactdev.impactor.api.plugin.ImpactorPlugin;
import net.impactdev.impactor.core.commands.ImpactorCommandRegistry;
import net.impactdev.impactor.core.commands.parsers.CurrencyParser;
import net.impactdev.impactor.core.modules.ImpactorModule;
import net.impactdev.impactor.core.plugin.ImpactorBootstrapper;
import net.impactdev.impactor.forge.commands.ForgeCommandManager;
import net.impactdev.impactor.forge.commands.ForgeCommandModule;
import net.impactdev.impactor.forge.platform.ForgePlatformModule;
import net.impactdev.impactor.forge.scheduler.ForgeSchedulerModule;
import net.impactdev.impactor.forge.ui.ForgeUIModule;
import net.impactdev.impactor.minecraft.plugin.GameImpactorPlugin;
import net.minecraft.commands.arguments.ResourceLocationArgument;

import java.util.Objects;
import java.util.Set;

public class ForgeImpactorPlugin extends GameImpactorPlugin implements ImpactorPlugin {
Expand All @@ -57,31 +47,6 @@ public void construct() {
super.construct();
}

@Override
protected void registerCommandMappings(ImpactorCommandRegistry registry) {
ForgeCommandManager manager = (ForgeCommandManager) registry.manager();
manager.delegate().parserRegistry().registerParserSupplier(
TypeToken.get(CurrencyParser.class),
params -> new WrappedBrigadierParser<>(ResourceLocationArgument.id())
);

MinecraftHelp<CommandSource> helper = new MinecraftHelp<>(
"/impactor help",
CommandSource::source,
registry.manager().delegate()
);

registry.manager().delegate().command(registry.manager()
.delegate()
.commandBuilder("impactor")
.literal("help")
.argument(StringArgument.optional("query", StringArgument.StringMode.GREEDY))
.handler(context -> {
helper.queryCommands(Objects.requireNonNull(context.getOrDefault("query", "")), context.getSender());
})
);
}

@Override
protected Set<Class<? extends ImpactorModule>> modules() {
Set<Class<? extends ImpactorModule>> parent = super.modules();
Expand Down

0 comments on commit dcab3a3

Please sign in to comment.