feat: added AbstractCommand, load commands

This commit is contained in:
əlemi 2023-03-04 01:30:47 +01:00
parent 6871d1dc3c
commit 414fbf4962
Signed by: alemi
GPG key ID: A4895B84D311642C
2 changed files with 44 additions and 2 deletions

View file

@ -0,0 +1,35 @@
package ftbsc.bscv.commands;
import java.util.Collections;
import java.util.List;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import ftbsc.bscv.Boscovicino;
import ftbsc.bscv.ICommons;
import ftbsc.bscv.api.ICommand;
import net.minecraft.command.CommandSource;
import net.minecraft.command.Commands;
public abstract class AbstractCommand implements ICommand, ICommons {
public String getName() {
return this.getClass().getSimpleName();
}
public CommandDispatcher<CommandSource> getDispatcher() {
return Boscovicino.modManager.getDispatcher();
}
public List<LiteralArgumentBuilder<CommandSource>> subcommands() {
return Collections.emptyList();
}
abstract LiteralArgumentBuilder<CommandSource> register(LiteralArgumentBuilder<CommandSource> builder);
public AbstractCommand() {
LiteralArgumentBuilder<CommandSource> builder = Commands.literal(this.getName().toLowerCase());
this.getDispatcher().register(this.register(builder));
}
}

View file

@ -1,6 +1,8 @@
package ftbsc.bscv.system;
import com.mojang.brigadier.CommandDispatcher;
import ftbsc.bscv.api.ICommand;
import ftbsc.bscv.api.ILoadable;
import ftbsc.bscv.api.IModule;
import net.minecraft.command.CommandSource;
@ -15,6 +17,7 @@ public class ModManager {
private Builder cfgBuilder;
private CommandDispatcher<CommandSource> dispatcher;
public final Set<ICommand> commands;
public final Set<IModule> mods;
public final Set<String> categories;
@ -22,9 +25,9 @@ public class ModManager {
this.cfgBuilder = cfgBuilder;
this.dispatcher = dispatcher;
this.mods = new HashSet<>();
this.commands = new HashSet<>();
this.categories = new HashSet<>();
}
@Nullable
public IModule get(Class<? extends IModule> clazz) {
@ -39,11 +42,15 @@ public class ModManager {
public void load() {
for (ILoadable module : ServiceLoader.load(ILoadable.class)) {
if(module instanceof IModule) {
IModule mod = (IModule) module;
IModule mod = (IModule) module;
this.mods.add(mod);
this.categories.add(mod.getGroup());
this.cfgBuilder.pop(); // TODO
}
if(module instanceof ICommand) { // TODO do these belong here?
ICommand cmd = (ICommand) module;
this.commands.add(cmd);
}
}
}