fabric: Use stateful command manager

This commit is contained in:
Zach Levis 2020-12-15 20:58:20 -08:00 committed by Jason
parent eef98da9c9
commit dc90551168
2 changed files with 6 additions and 6 deletions

View file

@ -149,4 +149,8 @@ public class FabricCommandManager<C> extends CommandManager<C> implements Brigad
return this.brigadierManager; return this.brigadierManager;
} }
final void registrationCalled() {
this.transitionOrThrow(RegistrationState.REGISTERING, RegistrationState.AFTER_REGISTRATION);
}
} }

View file

@ -50,7 +50,6 @@ import java.util.concurrent.ConcurrentHashMap;
public final class FabricCommandRegistrationHandler<C> implements CommandRegistrationHandler { public final class FabricCommandRegistrationHandler<C> implements CommandRegistrationHandler {
private @MonotonicNonNull FabricCommandManager<C> commandManager; private @MonotonicNonNull FabricCommandManager<C> commandManager;
private final Set<Command<C>> registeredCommands = ConcurrentHashMap.newKeySet(); private final Set<Command<C>> registeredCommands = ConcurrentHashMap.newKeySet();
private boolean commandRegistrationCalled;
void initialize(final FabricCommandManager<C> manager) { void initialize(final FabricCommandManager<C> manager) {
this.commandManager = manager; this.commandManager = manager;
@ -60,16 +59,13 @@ public final class FabricCommandRegistrationHandler<C> implements CommandRegistr
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public boolean registerCommand(@NonNull final Command<?> command) { public boolean registerCommand(@NonNull final Command<?> command) {
if (this.commandRegistrationCalled) {
throw new IllegalStateException("too late!");
}
return this.registeredCommands.add((Command<C>) command); return this.registeredCommands.add((Command<C>) command);
} }
private void registerAllCommands(final CommandDispatcher<ServerCommandSource> dispatcher, final boolean isDedicated) { private void registerAllCommands(final CommandDispatcher<ServerCommandSource> dispatcher, final boolean isDedicated) {
this.commandRegistrationCalled = true; this.commandManager.registrationCalled();
for (final Command<C> command : this.registeredCommands) { for (final Command<C> command : this.registeredCommands) {
registerCommand(dispatcher.getRoot(), command); this.registerCommand(dispatcher.getRoot(), command);
} }
} }