Skip to content

Commit 2e1a252

Browse files
committed
feat: Add BalmClient#clientCommands
1 parent b399a03 commit 2e1a252

8 files changed

Lines changed: 112 additions & 0 deletions

File tree

common/src/main/java/net/blay09/mods/balm/api/client/BalmClient.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.blay09.mods.balm.api.BalmRuntimeLoadContext;
44
import net.blay09.mods.balm.api.EmptyLoadContext;
5+
import net.blay09.mods.balm.api.client.commands.BalmClientCommands;
56
import net.blay09.mods.balm.api.client.keymappings.BalmKeyMappings;
67
import net.blay09.mods.balm.api.client.module.BalmClientModule;
78
import net.blay09.mods.balm.api.client.rendering.BalmModels;
@@ -103,4 +104,14 @@ public static BalmClientRuntime getRuntime() {
103104
public static BalmTextures getTextures() {
104105
return runtime.getTextures();
105106
}
107+
108+
/**
109+
* Provides access to client command registration.
110+
*
111+
* @return implementation of {@link BalmClientCommands} for the mod loader Balm is running on.
112+
*/
113+
public static BalmClientCommands clientCommands() {
114+
return runtime.clientCommands();
115+
}
116+
106117
}

common/src/main/java/net/blay09/mods/balm/api/client/BalmClientRuntime.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.blay09.mods.balm.api.Balm;
44
import net.blay09.mods.balm.api.BalmRuntimeLoadContext;
5+
import net.blay09.mods.balm.api.client.commands.BalmClientCommands;
56
import net.blay09.mods.balm.api.client.keymappings.BalmKeyMappings;
67
import net.blay09.mods.balm.api.client.module.BalmClientModule;
78
import net.blay09.mods.balm.api.client.rendering.BalmModels;
@@ -29,6 +30,7 @@ default void initializeModule(BalmClientModule module) {
2930
module.registerScreens(getScreens().scoped(modId));
3031
module.registerModels(getModels().scoped(modId));
3132
module.registerKeyMappings(getKeyMappings().scoped(modId));
33+
module.registerClientCommands(clientCommands());
3234
module.initialize();
3335
}
3436

@@ -38,6 +40,8 @@ default void initializeModule(BalmClientModule module) {
3840

3941
void registerModule(BalmClientModule module);
4042

43+
BalmClientCommands clientCommands();
44+
4145
void addResourceReloadListener(ResourceLocation identifier, PreparableReloadListener reloadListener);
4246

4347
/**
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package net.blay09.mods.balm.api.client.commands;
2+
3+
import com.mojang.brigadier.CommandDispatcher;
4+
import net.minecraft.commands.SharedSuggestionProvider;
5+
6+
import java.util.function.Consumer;
7+
8+
public interface BalmClientCommands {
9+
void register(Consumer<CommandDispatcher<SharedSuggestionProvider>> initializer);
10+
}

common/src/main/java/net/blay09/mods/balm/api/client/module/BalmClientModule.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.blay09.mods.balm.api.client.module;
22

3+
import net.blay09.mods.balm.api.client.commands.BalmClientCommands;
34
import net.blay09.mods.balm.api.client.keymappings.BalmKeyMappings;
45
import net.blay09.mods.balm.api.client.rendering.BalmModels;
56
import net.blay09.mods.balm.api.client.rendering.BalmRenderers;
@@ -27,4 +28,7 @@ default void registerKeyMappings(BalmKeyMappings keyMappings) {
2728

2829
default void initialize() {
2930
}
31+
32+
default void registerClientCommands(BalmClientCommands commands) {
33+
}
3034
}

fabric/src/main/java/net/blay09/mods/balm/fabric/client/FabricBalmClientRuntime.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.blay09.mods.balm.api.Balm;
44
import net.blay09.mods.balm.api.BalmRuntimeLoadContext;
5+
import net.blay09.mods.balm.api.client.commands.BalmClientCommands;
56
import net.blay09.mods.balm.api.client.keymappings.BalmKeyMappings;
67
import net.blay09.mods.balm.api.client.rendering.BalmModels;
78
import net.blay09.mods.balm.api.client.rendering.BalmRenderers;
@@ -13,6 +14,7 @@
1314
import net.blay09.mods.balm.common.NamespaceResolver;
1415
import net.blay09.mods.balm.common.client.CommonBalmClientRuntime;
1516
import net.blay09.mods.balm.fabric.FabricBalmRuntime;
17+
import net.blay09.mods.balm.fabric.client.internal.commands.FabricBalmClientCommands;
1618
import net.blay09.mods.balm.fabric.client.keymappings.FabricBalmKeyMappings;
1719
import net.blay09.mods.balm.fabric.client.rendering.FabricBalmModels;
1820
import net.blay09.mods.balm.fabric.client.rendering.FabricBalmRenderers;
@@ -46,6 +48,7 @@ public class FabricBalmClientRuntime extends CommonBalmClientRuntime {
4648
private final BalmScreens screens = new FabricBalmScreens(legacyNamespaceResolver);
4749
private final BalmKeyMappings keyMappings = createKeyMappingsBindings();
4850
private final BalmModels models = new FabricBalmModels(legacyNamespaceResolver);
51+
private final BalmClientCommands clientCommands = new FabricBalmClientCommands();
4952

5053
public FabricBalmClientRuntime() {
5154
FabricBalmClientEvents.registerEvents(((FabricBalmEvents) Balm.getEvents()));
@@ -94,6 +97,11 @@ public BalmModels getModels() {
9497
return models;
9598
}
9699

100+
@Override
101+
public BalmClientCommands clientCommands() {
102+
return clientCommands;
103+
}
104+
97105
@Override
98106
public void initializeMod(String modId, BalmRuntimeLoadContext context, Runnable initializer) {
99107
BalmLoadContexts.register(modId, context);
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package net.blay09.mods.balm.fabric.client.internal.commands;
2+
3+
import com.mojang.brigadier.CommandDispatcher;
4+
import net.blay09.mods.balm.api.client.commands.BalmClientCommands;
5+
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
6+
import net.minecraft.commands.SharedSuggestionProvider;
7+
8+
import java.util.ArrayList;
9+
import java.util.Collections;
10+
import java.util.List;
11+
import java.util.function.Consumer;
12+
13+
public class FabricBalmClientCommands implements BalmClientCommands {
14+
15+
private final List<Consumer<CommandDispatcher<SharedSuggestionProvider>>> commands = Collections.synchronizedList(new ArrayList<>());
16+
17+
public FabricBalmClientCommands() {
18+
ClientCommandRegistrationCallback.EVENT.register((dispatcher, buildContext) -> {
19+
final var sharedDispatcher = asSharedDispatcher(dispatcher);
20+
commands.forEach(it -> it.accept(sharedDispatcher));
21+
});
22+
}
23+
24+
@SuppressWarnings({"unchecked", "rawtypes"})
25+
private static CommandDispatcher<SharedSuggestionProvider> asSharedDispatcher(CommandDispatcher<?> dispatcher) {
26+
return (CommandDispatcher) dispatcher;
27+
}
28+
29+
@Override
30+
public void register(Consumer<CommandDispatcher<SharedSuggestionProvider>> initializer) {
31+
commands.add(initializer);
32+
}
33+
}

forge/src/main/java/net/blay09/mods/balm/forge/client/ForgeBalmClientRuntime.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.blay09.mods.balm.api.Balm;
44
import net.blay09.mods.balm.api.BalmRuntimeLoadContext;
5+
import net.blay09.mods.balm.api.client.commands.BalmClientCommands;
56
import net.blay09.mods.balm.api.client.keymappings.BalmKeyMappings;
67
import net.blay09.mods.balm.api.client.rendering.BalmModels;
78
import net.blay09.mods.balm.api.client.rendering.BalmRenderers;
@@ -13,6 +14,7 @@
1314
import net.blay09.mods.balm.common.client.CommonBalmClientRuntime;
1415
import net.blay09.mods.balm.forge.ForgeLoadContext;
1516
import net.blay09.mods.balm.forge.ModBusEventRegisters;
17+
import net.blay09.mods.balm.forge.client.internal.commands.ForgeBalmClientCommands;
1618
import net.blay09.mods.balm.forge.client.keymappings.ForgeBalmKeyMappings;
1719
import net.blay09.mods.balm.forge.client.rendering.ForgeBalmModels;
1820
import net.blay09.mods.balm.forge.client.rendering.ForgeBalmRenderers;
@@ -34,6 +36,7 @@ public class ForgeBalmClientRuntime extends CommonBalmClientRuntime<ForgeLoadCon
3436
private final BalmScreens screens = new ForgeBalmScreens(legacyNamespaceResolver);
3537
private final BalmKeyMappings keyMappings = new ForgeBalmKeyMappings(legacyNamespaceResolver);
3638
private final BalmModels models = new ForgeBalmModels(legacyNamespaceResolver);
39+
private final BalmClientCommands clientCommands = new ForgeBalmClientCommands();
3740

3841
@Deprecated(forRemoval = true, since = "1.21.5")
3942
private final BalmTextures textures = new ForgeBalmTextures();
@@ -63,6 +66,11 @@ public BalmModels getModels() {
6366
return models;
6467
}
6568

69+
@Override
70+
public BalmClientCommands clientCommands() {
71+
return clientCommands;
72+
}
73+
6674
@Override
6775
public BalmKeyMappings getKeyMappings() {
6876
return keyMappings;
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package net.blay09.mods.balm.forge.client.internal.commands;
2+
3+
import com.mojang.brigadier.CommandDispatcher;
4+
import net.blay09.mods.balm.api.client.commands.BalmClientCommands;
5+
import net.minecraftforge.common.MinecraftForge;
6+
import net.minecraft.commands.SharedSuggestionProvider;
7+
import net.minecraftforge.client.event.RegisterClientCommandsEvent;
8+
9+
import java.util.ArrayList;
10+
import java.util.Collections;
11+
import java.util.List;
12+
import java.util.function.Consumer;
13+
14+
public class ForgeBalmClientCommands implements BalmClientCommands {
15+
16+
private final List<Consumer<CommandDispatcher<SharedSuggestionProvider>>> commands = Collections.synchronizedList(new ArrayList<>());
17+
18+
public ForgeBalmClientCommands() {
19+
MinecraftForge.EVENT_BUS.addListener((RegisterClientCommandsEvent event) -> {
20+
final var sharedDispatcher = asSharedDispatcher(event.getDispatcher());
21+
commands.forEach(it -> it.accept(sharedDispatcher));
22+
});
23+
}
24+
25+
@SuppressWarnings({"unchecked", "rawtypes"})
26+
private static CommandDispatcher<SharedSuggestionProvider> asSharedDispatcher(CommandDispatcher<?> dispatcher) {
27+
return (CommandDispatcher) dispatcher;
28+
}
29+
30+
@Override
31+
public void register(Consumer<CommandDispatcher<SharedSuggestionProvider>> initializer) {
32+
commands.add(initializer);
33+
}
34+
}

0 commit comments

Comments
 (0)