TotalFreedomMod/commons/src/main/java/me/totalfreedom/totalfreedommod/command/CommandLoader.java

100 lines
2.7 KiB
Java

package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.util.FLog;
import org.reflections.Reflections;
public class CommandLoader extends FreedomService
{
private final List<FreedomCommand> commands;
public CommandLoader()
{
commands = new ArrayList<>();
}
@Override
public void onStart()
{
}
@Override
public void onStop()
{
}
public void add(FreedomCommand command)
{
commands.add(command);
command.register();
}
public FreedomCommand getByName(String name)
{
for (FreedomCommand command : commands)
{
if (name.equals(command.getName()))
{
return command;
}
}
return null;
}
public boolean isAlias(String alias)
{
for (FreedomCommand command : commands)
{
if (Arrays.asList(command.getAliases().split(",")).contains(alias))
{
return true;
}
}
return false;
}
public void loadCommands()
{
Reflections commandDir = new Reflections("me.totalfreedom.totalfreedommod.command");
Set<Class<? extends FreedomCommand>> commandClasses = commandDir.getSubTypesOf(FreedomCommand.class);
commandLoading:
for (Class<? extends FreedomCommand> commandClass : commandClasses)
{
try
{
if (commandClass.isAnnotationPresent(CommandDependencies.class))
{
String[] dependencies = commandClass.getAnnotation(CommandDependencies.class).value();
for (String plugin : dependencies)
{
if (!server.getPluginManager().isPluginEnabled(plugin))
{
FLog.warning("Not loading command due to missing dependency (" + plugin + "): /" + commandClass.getSimpleName().replace("Command_", ""));
continue commandLoading;
}
}
}
add(commandClass.newInstance());
}
catch (InstantiationException | IllegalAccessException | ExceptionInInitializerError ex)
{
FLog.warning("Failed to register command: /" + commandClass.getSimpleName().replace("Command_", ""));
}
}
FLog.info("Loaded " + commands.size() + " commands");
}
public List<FreedomCommand> getCommands()
{
return commands;
}
}