Skip to content

Commit

Permalink
chore: cleanup command registration
Browse files Browse the repository at this point in the history
  • Loading branch information
kashike authored and jpenilla committed Oct 29, 2023
1 parent 50327c7 commit 45369aa
Show file tree
Hide file tree
Showing 7 changed files with 97 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import net.draycia.carbon.api.event.CarbonEventHandler;
import net.draycia.carbon.api.users.UserManager;
import net.draycia.carbon.common.channels.CarbonChannelRegistry;
import net.draycia.carbon.common.command.CarbonCommand;
import net.draycia.carbon.common.command.ExecutionCoordinatorHolder;
import net.draycia.carbon.common.config.ConfigManager;
import net.draycia.carbon.common.listeners.Listener;
Expand Down Expand Up @@ -99,8 +100,8 @@ protected void init() {

// Commands
// This is a bit awkward looking
CloudUtils.loadCommands(this.injector);
CloudUtils.registerCommands(this.injector.getInstance(ConfigManager.class).loadCommandSettings());
final Set<CarbonCommand> commands = this.injector.getInstance(Key.get(new TypeLiteral<Set<CarbonCommand>>() {}));
CloudUtils.registerCommands(commands, this.injector.getInstance(ConfigManager.class).loadCommandSettings());

this.periodicTasks.scheduleAtFixedRate(
() -> PlayerUtils.saveLoggedInPlayers(this.carbonServer, this.userManager, this.logger),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import com.google.inject.Module;
import com.google.inject.Provider;
import com.google.inject.Provides;
import com.google.inject.Scopes;
import com.google.inject.Singleton;
import com.google.inject.TypeLiteral;
import com.google.inject.assistedinject.FactoryModuleBuilder;
Expand All @@ -40,8 +41,28 @@
import net.draycia.carbon.api.users.UserManager;
import net.draycia.carbon.common.channels.CarbonChannelRegistry;
import net.draycia.carbon.common.command.ArgumentFactory;
import net.draycia.carbon.common.command.CarbonCommand;
import net.draycia.carbon.common.command.ExecutionCoordinatorHolder;
import net.draycia.carbon.common.command.argument.PlayerSuggestions;
import net.draycia.carbon.common.command.commands.ClearChatCommand;
import net.draycia.carbon.common.command.commands.ContinueCommand;
import net.draycia.carbon.common.command.commands.DebugCommand;
import net.draycia.carbon.common.command.commands.HelpCommand;
import net.draycia.carbon.common.command.commands.IgnoreCommand;
import net.draycia.carbon.common.command.commands.IgnoreListCommand;
import net.draycia.carbon.common.command.commands.JoinCommand;
import net.draycia.carbon.common.command.commands.LeaveCommand;
import net.draycia.carbon.common.command.commands.MuteCommand;
import net.draycia.carbon.common.command.commands.MuteInfoCommand;
import net.draycia.carbon.common.command.commands.NicknameCommand;
import net.draycia.carbon.common.command.commands.PartyCommands;
import net.draycia.carbon.common.command.commands.ReloadCommand;
import net.draycia.carbon.common.command.commands.ReplyCommand;
import net.draycia.carbon.common.command.commands.ToggleMessagesCommand;
import net.draycia.carbon.common.command.commands.UnignoreCommand;
import net.draycia.carbon.common.command.commands.UnmuteCommand;
import net.draycia.carbon.common.command.commands.UpdateUsernameCommand;
import net.draycia.carbon.common.command.commands.WhisperCommand;
import net.draycia.carbon.common.config.ConfigManager;
import net.draycia.carbon.common.config.DatabaseSettings;
import net.draycia.carbon.common.event.CarbonEventHandlerImpl;
Expand Down Expand Up @@ -80,6 +101,7 @@
import net.draycia.carbon.common.users.db.mapper.BinaryUUIDColumnMapper;
import net.draycia.carbon.common.users.db.mapper.NativeUUIDColumnMapper;
import net.draycia.carbon.common.users.json.JSONUserManager;
import net.draycia.carbon.common.util.CloudUtils;
import net.draycia.carbon.common.util.ConcurrentUtil;
import net.draycia.carbon.common.util.Exceptions;
import net.draycia.carbon.common.util.FileUtil;
Expand Down Expand Up @@ -183,6 +205,11 @@ protected void configure() {
this.bind(new TypeLiteral<UserManager<?>>() {}).to(PlatformUserManager.class);
this.bind(new TypeLiteral<UserManagerInternal<?>>() {}).to(PlatformUserManager.class);

this.configureListeners();
this.configureCommands();
}

private void configureListeners() {
final Multibinder<Listener> listeners = Multibinder.newSetBinder(this.binder(), Listener.class);
listeners.addBinding().to(DeafenHandler.class);
listeners.addBinding().to(HyperlinkHandler.class);
Expand All @@ -194,6 +221,31 @@ protected void configure() {
listeners.addBinding().to(RadiusListener.class);
}

private void configureCommands() {
this.requestStaticInjection(CloudUtils.class);

final Multibinder<CarbonCommand> commands = Multibinder.newSetBinder(this.binder(), CarbonCommand.class);
commands.addBinding().to(ClearChatCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(ContinueCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(DebugCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(HelpCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(IgnoreCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(MuteCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(MuteInfoCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(NicknameCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(ReloadCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(ReplyCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(ToggleMessagesCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(UnignoreCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(UnmuteCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(UpdateUsernameCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(WhisperCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(JoinCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(LeaveCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(IgnoreListCommand.class).in(Scopes.SINGLETON);
commands.addBinding().to(PartyCommands.class).in(Scopes.SINGLETON);
}

// Helper to create a FactoryProvider3 module
private static <T> Module factoryModule(final Class<T> factoryInterface) {
return new AbstractModule() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,39 +26,19 @@
import cloud.commandframework.exceptions.InvalidSyntaxException;
import cloud.commandframework.exceptions.NoPermissionException;
import cloud.commandframework.execution.FilteringCommandSuggestionProcessor;
import com.google.inject.Injector;
import com.google.inject.Inject;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import net.draycia.carbon.api.users.CarbonPlayer;
import net.draycia.carbon.common.command.CarbonCommand;
import net.draycia.carbon.common.command.CommandSettings;
import net.draycia.carbon.common.command.Commander;
import net.draycia.carbon.common.command.PlayerCommander;
import net.draycia.carbon.common.command.commands.ClearChatCommand;
import net.draycia.carbon.common.command.commands.ContinueCommand;
import net.draycia.carbon.common.command.commands.DebugCommand;
import net.draycia.carbon.common.command.commands.HelpCommand;
import net.draycia.carbon.common.command.commands.IgnoreCommand;
import net.draycia.carbon.common.command.commands.IgnoreListCommand;
import net.draycia.carbon.common.command.commands.JoinCommand;
import net.draycia.carbon.common.command.commands.LeaveCommand;
import net.draycia.carbon.common.command.commands.MuteCommand;
import net.draycia.carbon.common.command.commands.MuteInfoCommand;
import net.draycia.carbon.common.command.commands.NicknameCommand;
import net.draycia.carbon.common.command.commands.PartyCommands;
import net.draycia.carbon.common.command.commands.ReloadCommand;
import net.draycia.carbon.common.command.commands.ReplyCommand;
import net.draycia.carbon.common.command.commands.ToggleMessagesCommand;
import net.draycia.carbon.common.command.commands.UnignoreCommand;
import net.draycia.carbon.common.command.commands.UnmuteCommand;
import net.draycia.carbon.common.command.commands.UpdateUsernameCommand;
import net.draycia.carbon.common.command.commands.WhisperCommand;
import net.draycia.carbon.common.command.exception.CommandCompleted;
import net.draycia.carbon.common.messages.CarbonMessages;
import net.kyori.adventure.key.Key;
Expand All @@ -75,39 +55,25 @@ public final class CloudUtils {
private static final Component NULL = Component.text("null");
private static final Pattern SPECIAL_CHARACTERS_PATTERN = Pattern.compile("[^\\s\\w\\-]");

public static final List<Class<? extends CarbonCommand>> COMMAND_CLASSES = List.of(ClearChatCommand.class,
ContinueCommand.class, DebugCommand.class, HelpCommand.class, IgnoreCommand.class, MuteCommand.class,
MuteInfoCommand.class, NicknameCommand.class, ReloadCommand.class, ReplyCommand.class, ToggleMessagesCommand.class,
UnignoreCommand.class, UnmuteCommand.class, UpdateUsernameCommand.class, WhisperCommand.class, JoinCommand.class, LeaveCommand.class,
IgnoreListCommand.class, PartyCommands.class);

private static final List<CarbonCommand> CONSTRUCTED_COMMANDS = new ArrayList<>();
@Inject
private static Set<CarbonCommand> commands;

private CloudUtils() {

}

public static void loadCommands(final Injector injector) {
for (final var commandClass : COMMAND_CLASSES) {
final CarbonCommand commandInstance = injector.getInstance(commandClass);
CONSTRUCTED_COMMANDS.add(commandInstance);

// TODO: load from command-settings.conf
}
}

public static Map<Key, CommandSettings> defaultCommandSettings() {
final Map<Key, CommandSettings> settings = new HashMap<>();

for (final var command : CONSTRUCTED_COMMANDS) {
for (final var command : commands) {
settings.put(command.key(), command.commandSettings());
}

return settings;
}

public static void registerCommands(final Map<Key, CommandSettings> settings) {
for (final var command : CONSTRUCTED_COMMANDS) {
public static void registerCommands(final Set<CarbonCommand> commands, final Map<Key, CommandSettings> settings) {
for (final var command : commands) {
command.commandSettings(settings.get(command.key()));

if (command.commandSettings().enabled()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@

import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.google.inject.TypeLiteral;
import github.scarsz.discordsrv.DiscordSRV;
import java.util.Set;
import java.util.concurrent.ScheduledExecutorService;
Expand All @@ -43,8 +45,6 @@
import net.draycia.carbon.paper.hooks.DSRVChatHook;
import net.draycia.carbon.paper.hooks.PAPIChatHook;
import net.draycia.carbon.paper.listeners.DiscordMessageListener;
import net.draycia.carbon.paper.listeners.PaperChatListener;
import net.draycia.carbon.paper.listeners.PaperPlayerJoinListener;
import org.apache.logging.log4j.LogManager;
import org.bstats.bukkit.Metrics;
import org.bstats.charts.SimplePie;
Expand All @@ -58,10 +58,6 @@
@Singleton
public final class CarbonChatPaper extends CarbonChatInternal {

private static final Set<Class<? extends Listener>> LISTENER_CLASSES = Set.of(
PaperChatListener.class,
PaperPlayerJoinListener.class
);
private static final int BSTATS_PLUGIN_ID = 8720;

private final JavaPlugin plugin;
Expand Down Expand Up @@ -101,9 +97,10 @@ private CarbonChatPaper(
void onEnable() {
this.init();

for (final Class<? extends Listener> listenerClass : LISTENER_CLASSES) {
final Set<Listener> listeners = this.injector().getInstance(Key.get(new TypeLiteral<Set<Listener>>() {}));
for (final Listener listener : listeners) {
this.plugin.getServer().getPluginManager().registerEvents(
this.injector().getInstance(listenerClass),
listener,
this.plugin
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Singleton;
import com.google.inject.multibindings.Multibinder;
import java.nio.file.Path;
import net.draycia.carbon.api.CarbonChat;
import net.draycia.carbon.api.CarbonServer;
Expand All @@ -41,13 +42,16 @@
import net.draycia.carbon.common.util.CloudUtils;
import net.draycia.carbon.paper.command.PaperCommander;
import net.draycia.carbon.paper.command.PaperPlayerCommander;
import net.draycia.carbon.paper.listeners.PaperChatListener;
import net.draycia.carbon.paper.listeners.PaperPlayerJoinListener;
import net.draycia.carbon.paper.messages.PaperMessageRenderer;
import net.draycia.carbon.paper.users.CarbonPlayerPaper;
import net.draycia.carbon.paper.users.PaperProfileResolver;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bukkit.Server;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
Expand Down Expand Up @@ -114,6 +118,14 @@ public void configure() {
this.bind(PlatformScheduler.class).to(PaperScheduler.class);
this.install(PlatformUserManager.PlayerFactory.moduleFor(CarbonPlayerPaper.class));
this.bind(CarbonMessageRenderer.class).to(PaperMessageRenderer.class);

this.configureListeners();
}

private void configureListeners() {
final Multibinder<Listener> listeners = Multibinder.newSetBinder(this.binder(), Listener.class);
listeners.addBinding().to(PaperChatListener.class);
listeners.addBinding().to(PaperPlayerJoinListener.class);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@

import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.google.inject.TypeLiteral;
import com.velocitypowered.api.plugin.PluginContainer;
import com.velocitypowered.api.proxy.ProxyServer;
import java.util.Set;
Expand All @@ -38,10 +40,7 @@
import net.draycia.carbon.common.users.PlatformUserManager;
import net.draycia.carbon.common.users.ProfileCache;
import net.draycia.carbon.common.users.ProfileResolver;
import net.draycia.carbon.velocity.listeners.VelocityChatListener;
import net.draycia.carbon.velocity.listeners.VelocityListener;
import net.draycia.carbon.velocity.listeners.VelocityPlayerJoinListener;
import net.draycia.carbon.velocity.listeners.VelocityPlayerLeaveListener;
import org.apache.logging.log4j.LogManager;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.framework.qual.DefaultQualifier;
Expand All @@ -50,12 +49,6 @@
@Singleton
public class CarbonChatVelocity extends CarbonChatInternal {

private static final Set<Class<? extends VelocityListener<?>>> LISTENER_CLASSES = Set.of(
VelocityChatListener.class,
VelocityPlayerJoinListener.class,
VelocityPlayerLeaveListener.class
);

private final ProxyServer proxyServer;

@Inject
Expand Down Expand Up @@ -96,8 +89,9 @@ public CarbonChatVelocity(
public void onInitialization(final CarbonVelocityBootstrap carbonVelocityBootstrap) {
this.init();

for (final Class<? extends VelocityListener<?>> clazz : LISTENER_CLASSES) {
this.injector().getInstance(clazz).register(this.proxyServer.getEventManager(), carbonVelocityBootstrap);
final Set<VelocityListener<?>> listeners = this.injector().getInstance(Key.get(new TypeLiteral<Set<VelocityListener<?>>>() {}));
for (final VelocityListener<?> listener : listeners) {
listener.register(this.proxyServer.getEventManager(), carbonVelocityBootstrap);
}

this.checkVersion();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Singleton;
import com.google.inject.TypeLiteral;
import com.google.inject.multibindings.Multibinder;
import com.velocitypowered.api.plugin.PluginContainer;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer;
Expand All @@ -43,6 +45,10 @@
import net.draycia.carbon.common.util.CloudUtils;
import net.draycia.carbon.velocity.command.VelocityCommander;
import net.draycia.carbon.velocity.command.VelocityPlayerCommander;
import net.draycia.carbon.velocity.listeners.VelocityChatListener;
import net.draycia.carbon.velocity.listeners.VelocityListener;
import net.draycia.carbon.velocity.listeners.VelocityPlayerJoinListener;
import net.draycia.carbon.velocity.listeners.VelocityPlayerLeaveListener;
import net.draycia.carbon.velocity.users.CarbonPlayerVelocity;
import net.draycia.carbon.velocity.users.VelocityProfileResolver;
import org.apache.logging.log4j.LogManager;
Expand Down Expand Up @@ -110,4 +116,11 @@ public void configure() {
this.bind(CarbonMessageRenderer.class).to(VelocityMessageRenderer.class);
}

private void configureListeners() {
final Multibinder<VelocityListener<?>> listeners = Multibinder.newSetBinder(this.binder(), new TypeLiteral<VelocityListener<?>>() {});
listeners.addBinding().to(VelocityChatListener.class);
listeners.addBinding().to(VelocityPlayerJoinListener.class);
listeners.addBinding().to(VelocityPlayerLeaveListener.class);
}

}

0 comments on commit 45369aa

Please sign in to comment.