Skip to content

Commit 6abe159

Browse files
committed
feat: Add BalmClient#clientCommands
1 parent f18e77c commit 6abe159

12 files changed

Lines changed: 188 additions & 1 deletion

File tree

common-example/src/main/java/com/example/balm/client/BalmExampleClient.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@
55
public class BalmExampleClient {
66
public static void initialize(BalmClientRegistrars registrars) {
77
System.out.println("Hello client");
8+
registrars.registerModule(new ClientCommandTestModule());
89
}
910
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.example.balm.client;
2+
3+
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
4+
import net.blay09.mods.balm.client.commands.BalmClientCommands;
5+
import net.blay09.mods.balm.client.platform.module.BalmClientModule;
6+
import net.minecraft.client.Minecraft;
7+
import net.minecraft.commands.SharedSuggestionProvider;
8+
import net.minecraft.network.chat.Component;
9+
import net.minecraft.resources.Identifier;
10+
11+
public class ClientCommandTestModule implements BalmClientModule {
12+
13+
@Override
14+
public Identifier getId() {
15+
return Identifier.fromNamespaceAndPath("balm_example", "client_commands");
16+
}
17+
18+
@Override
19+
public void registerClientCommands(BalmClientCommands commands) {
20+
commands.register(dispatcher -> dispatcher.register(
21+
LiteralArgumentBuilder.<SharedSuggestionProvider>literal("balm_client_test")
22+
.executes(context -> {
23+
final var player = Minecraft.getInstance().player;
24+
if (player != null) {
25+
player.sendSystemMessage(Component.literal("Hello from a Balm client command!"));
26+
}
27+
return 1;
28+
})
29+
));
30+
}
31+
}

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

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

33
import net.blay09.mods.balm.Balm;
4+
import net.blay09.mods.balm.client.commands.BalmClientCommands;
45
import net.blay09.mods.balm.client.platform.BalmClientHooks;
56
import net.blay09.mods.balm.client.platform.runtime.internal.BalmClientRuntime;
67
import net.blay09.mods.balm.client.platform.runtime.internal.BalmClientRuntimeSpi;
@@ -89,4 +90,13 @@ public static BalmClientHooks clientHooks() {
8990
return runtime.clientHooks();
9091
}
9192

93+
/**
94+
* Provides access to client command registration.
95+
*
96+
* @return implementation of {@link BalmClientCommands} for the mod loader Balm is running on.
97+
*/
98+
public static BalmClientCommands clientCommands() {
99+
return runtime.clientCommands();
100+
}
101+
92102
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package net.blay09.mods.balm.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/client/platform/module/BalmClientModule.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.blay09.mods.balm.client.BalmKeyMappingRegistrar;
66
import net.blay09.mods.balm.client.BalmClientTooltipComponentRegistrar;
77
import net.blay09.mods.balm.client.BalmRangeSelectItemModelPropertyRegistrar;
8+
import net.blay09.mods.balm.client.commands.BalmClientCommands;
89
import net.blay09.mods.balm.client.gui.screens.inventory.BalmMenuScreenRegistrar;
910
import net.blay09.mods.balm.client.renderer.blockentity.BalmBlockEntityRendererRegistrar;
1011
import net.blay09.mods.balm.client.renderer.entity.BalmEntityRendererRegistrar;
@@ -60,6 +61,9 @@ default void registerClientTooltipComponents(BalmClientTooltipComponentRegistrar
6061
default void registerRangeSelectItemModelProperties(BalmRangeSelectItemModelPropertyRegistrar rangeSelectItemModelProperties) {
6162
}
6263

64+
default void registerClientCommands(BalmClientCommands commands) {
65+
}
66+
6367
default void initialize() {
6468
}
6569
}

common/src/main/java/net/blay09/mods/balm/client/platform/runtime/internal/BalmClientRuntime.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import net.blay09.mods.balm.client.BalmClientRegistrars;
55
import net.blay09.mods.balm.client.BalmClientTooltipComponentRegistrar;
66
import net.blay09.mods.balm.client.BalmRangeSelectItemModelPropertyRegistrar;
7+
import net.blay09.mods.balm.client.commands.BalmClientCommands;
78
import net.blay09.mods.balm.client.gui.screens.inventory.BalmMenuScreenRegistrar;
89
import net.blay09.mods.balm.client.BalmKeyMappingRegistrar;
910
import net.blay09.mods.balm.client.platform.BalmClientHooks;
@@ -34,6 +35,7 @@ default void initializeModule(BalmClientModule module) {
3435
keyMappings(modId, module::registerKeyMappings);
3536
clientTooltipComponents(modId, module::registerClientTooltipComponents);
3637
rangeSelectItemModelProperties(modId, module::registerRangeSelectItemModelProperties);
38+
module.registerClientCommands(clientCommands());
3739

3840
module.initialize();
3941
}
@@ -44,6 +46,8 @@ default void initializeModule(BalmClientModule module) {
4446

4547
BalmClientHooks clientHooks();
4648

49+
BalmClientCommands clientCommands();
50+
4751
void registerModule(BalmClientRegistrars registrars, BalmClientModule module);
4852

4953
void blockEntityRenderers(String namespace, Consumer<BalmBlockEntityRendererRegistrar> initializer);
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.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+
}

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.blay09.mods.balm.client.BalmKeyMappingRegistrar;
77
import net.blay09.mods.balm.client.BalmRangeSelectItemModelPropertyRegistrar;
88
import net.blay09.mods.balm.client.color.block.BalmBlockColorRegistrar;
9+
import net.blay09.mods.balm.client.commands.BalmClientCommands;
910
import net.blay09.mods.balm.client.gui.screens.inventory.BalmMenuScreenRegistrar;
1011
import net.blay09.mods.balm.client.model.geom.BalmModelLayerRegistrar;
1112
import net.blay09.mods.balm.client.particle.BalmParticleProviderRegistrar;
@@ -16,6 +17,7 @@
1617
import net.blay09.mods.balm.fabric.client.internal.FabricBalmClientTooltipComponentRegistrar;
1718
import net.blay09.mods.balm.fabric.client.internal.FabricBalmKeyMappingRegistrar;
1819
import net.blay09.mods.balm.fabric.client.internal.FabricBalmRangeSelectItemModelPropertyRegistrar;
20+
import net.blay09.mods.balm.fabric.client.internal.commands.FabricBalmClientCommands;
1921
import net.blay09.mods.balm.fabric.client.internal.color.block.FabricBalmBlockColorRegistrar;
2022
import net.blay09.mods.balm.fabric.client.internal.event.FabricBalmClientEventMappings;
2123
import net.blay09.mods.balm.fabric.client.internal.event.FabricBalmSupplementalClientEvents;
@@ -38,6 +40,8 @@
3840

3941
public class FabricBalmClientRuntime extends CommonBalmClientRuntime<FabricLoadContext> {
4042

43+
private final BalmClientCommands clientCommands = new FabricBalmClientCommands();
44+
4145
public FabricBalmClientRuntime() {
4246
FabricBalmSupplementalClientEvents.initialize();
4347
FabricBalmClientEventMappings.bind();
@@ -70,6 +74,11 @@ public void initializeMod(String modId, FabricLoadContext context, Consumer<Balm
7074
initializer.accept(new BalmClientRegistrars(this, modId));
7175
}
7276

77+
@Override
78+
public BalmClientCommands clientCommands() {
79+
return clientCommands;
80+
}
81+
7382
@Override
7483
public void blockEntityRenderers(String namespace, Consumer<BalmBlockEntityRendererRegistrar> initializer) {
7584
initializer.accept(FabricBalmBlockEntityRendererRegistrar.INSTANCE);
@@ -125,4 +134,4 @@ public void clientTooltipComponents(String namespace, Consumer<BalmClientTooltip
125134
public void rangeSelectItemModelProperties(String namespace, Consumer<BalmRangeSelectItemModelPropertyRegistrar> initializer) {
126135
initializer.accept(FabricBalmRangeSelectItemModelPropertyRegistrar.INSTANCE);
127136
}
128-
}
137+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package net.blay09.mods.balm.forge.client.internal.commands;
2+
3+
import com.mojang.brigadier.CommandDispatcher;
4+
import net.blay09.mods.balm.client.commands.BalmClientCommands;
5+
import net.minecraft.commands.SharedSuggestionProvider;
6+
import net.minecraftforge.client.event.RegisterClientCommandsEvent;
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 ForgeBalmClientCommands implements BalmClientCommands {
14+
15+
private final List<Consumer<CommandDispatcher<SharedSuggestionProvider>>> commands = Collections.synchronizedList(new ArrayList<>());
16+
17+
public ForgeBalmClientCommands() {
18+
RegisterClientCommandsEvent.BUS.addListener(event -> {
19+
final var sharedDispatcher = asSharedDispatcher(event.getDispatcher());
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/platform/runtime/internal/ForgeBalmClientRuntime.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.blay09.mods.balm.client.BalmClientTooltipComponentRegistrar;
66
import net.blay09.mods.balm.client.BalmRangeSelectItemModelPropertyRegistrar;
77
import net.blay09.mods.balm.client.color.block.BalmBlockColorRegistrar;
8+
import net.blay09.mods.balm.client.commands.BalmClientCommands;
89
import net.blay09.mods.balm.client.gui.screens.inventory.BalmMenuScreenRegistrar;
910
import net.blay09.mods.balm.client.model.geom.BalmModelLayerRegistrar;
1011
import net.blay09.mods.balm.client.particle.BalmParticleProviderRegistrar;
@@ -15,6 +16,7 @@
1516
import net.blay09.mods.balm.forge.client.internal.ForgeBalmKeyMappingRegistrar;
1617
import net.blay09.mods.balm.forge.client.internal.ForgeBalmClientTooltipComponentRegistrar;
1718
import net.blay09.mods.balm.forge.client.internal.ForgeBalmRangeSelectItemModelPropertyRegistrar;
19+
import net.blay09.mods.balm.forge.client.internal.commands.ForgeBalmClientCommands;
1820
import net.blay09.mods.balm.forge.platform.runtime.ForgeLoadContext;
1921
import net.blay09.mods.balm.forge.platform.event.internal.ModBusEventRegisters;
2022
import net.blay09.mods.balm.forge.client.color.block.internal.ForgeBalmBlockColorRegistrar;
@@ -35,6 +37,8 @@
3537

3638
public class ForgeBalmClientRuntime extends CommonBalmClientRuntime<ForgeLoadContext> {
3739

40+
private final BalmClientCommands clientCommands = new ForgeBalmClientCommands();
41+
3842
public ForgeBalmClientRuntime() {
3943
ForgeBalmClientEventMappings.bind();
4044
}
@@ -48,6 +52,11 @@ public void initializeMod(String modId, ForgeLoadContext context, Consumer<BalmC
4852
ModBusEventRegisters.register(modId, context.modBusGroup());
4953
}
5054

55+
@Override
56+
public BalmClientCommands clientCommands() {
57+
return clientCommands;
58+
}
59+
5160
@Override
5261
public void blockEntityRenderers(String namespace, Consumer<BalmBlockEntityRendererRegistrar> initializer) {
5362
EntityRenderersEvent.RegisterRenderers.BUS.addListener((event) -> initializer.accept(new ForgeBalmBlockEntityRendererRegistrar(event)));

0 commit comments

Comments
 (0)