Skip to content

Commit 10f89fa

Browse files
committed
Add support for registering custom command argument type serializers.
1 parent 7adc9a2 commit 10f89fa

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

Common/src/main/java/net/darkhax/bookshelf/api/registry/RegistryHelper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import net.darkhax.bookshelf.api.item.ICreativeTabBuilder;
44
import net.darkhax.bookshelf.impl.registry.RegistryEntries;
55
import net.darkhax.bookshelf.mixin.item.AccessorItem;
6+
import net.minecraft.commands.synchronization.ArgumentSerializer;
67
import net.minecraft.server.packs.resources.PreparableReloadListener;
8+
import net.minecraft.util.Tuple;
79
import net.minecraft.world.effect.MobEffect;
810
import net.minecraft.world.entity.ai.attributes.Attribute;
911
import net.minecraft.world.entity.decoration.Motive;
@@ -29,6 +31,7 @@ public abstract class RegistryHelper {
2931
public final IRegistryEntries<PreparableReloadListener> clientReloadListeners;
3032

3133
public final IRegistryEntries<ICommandBuilder> commands;
34+
public final IRegistryEntries<Tuple<Class, ArgumentSerializer>> commandArguments;
3235
public final VillagerTradeEntries trades;
3336

3437
protected RegistryHelper(String ownerId) {
@@ -47,6 +50,7 @@ protected RegistryHelper(String ownerId) {
4750
this.clientReloadListeners = new RegistryEntries<>(ownerId);
4851

4952
this.commands = new RegistryEntries<>(ownerId);
53+
this.commandArguments = new RegistryEntries<>(ownerId);
5054
this.trades = new VillagerTradeEntries();
5155
}
5256

Fabric/src/main/java/net/darkhax/bookshelf/impl/registry/RegistryHelperFabric.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@
1313
import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback;
1414
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
1515
import net.minecraft.commands.CommandSourceStack;
16+
import net.minecraft.commands.synchronization.ArgumentSerializer;
17+
import net.minecraft.commands.synchronization.ArgumentTypes;
1618
import net.minecraft.core.Registry;
1719
import net.minecraft.resources.ResourceLocation;
1820
import net.minecraft.server.packs.PackType;
21+
import net.minecraft.util.Tuple;
1922
import net.minecraft.world.entity.npc.VillagerProfession;
2023
import net.minecraft.world.entity.npc.VillagerTrades;
2124

@@ -58,6 +61,15 @@ public void init() {
5861
CommandRegistrationCallback.EVENT.register(this::buildCommands);
5962
this.registerTradeData();
6063
this.registerWanderingTrades();
64+
this.registerCommandArguments();
65+
}
66+
67+
private void registerCommandArguments () {
68+
69+
for (Map.Entry<ResourceLocation, Tuple<Class, ArgumentSerializer>> entry : this.commandArguments.getEntries().entrySet()) {
70+
71+
ArgumentTypes.register(entry.getKey().toString(), entry.getValue().getA(), entry.getValue().getB());
72+
}
6173
}
6274

6375
private void registerTradeData() {

Forge/src/main/java/net/darkhax/bookshelf/impl/registry/RegistryHelperForge.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@
33
import com.google.common.collect.Multimap;
44
import com.mojang.brigadier.CommandDispatcher;
55
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
6+
import net.darkhax.bookshelf.Constants;
67
import net.darkhax.bookshelf.api.item.ICreativeTabBuilder;
78
import net.darkhax.bookshelf.api.registry.IRegistryEntries;
89
import net.darkhax.bookshelf.api.registry.RegistryHelper;
910
import net.darkhax.bookshelf.impl.item.CreativeTabBuilderForge;
1011
import net.minecraft.commands.CommandSourceStack;
1112
import net.minecraft.commands.Commands;
13+
import net.minecraft.commands.synchronization.ArgumentSerializer;
14+
import net.minecraft.commands.synchronization.ArgumentTypes;
1215
import net.minecraft.resources.ResourceLocation;
16+
import net.minecraft.util.Tuple;
1317
import net.minecraft.world.effect.MobEffect;
1418
import net.minecraft.world.entity.ai.attributes.Attribute;
1519
import net.minecraft.world.entity.decoration.Motive;
@@ -27,6 +31,7 @@
2731
import net.minecraftforge.event.village.WandererTradesEvent;
2832
import net.minecraftforge.eventbus.api.Event;
2933
import net.minecraftforge.eventbus.api.EventPriority;
34+
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
3035
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
3136
import net.minecraftforge.registries.IForgeRegistryEntry;
3237

@@ -65,6 +70,16 @@ public void init() {
6570
MinecraftForge.EVENT_BUS.addListener(this::buildCommands);
6671
MinecraftForge.EVENT_BUS.addListener(this::registerVillagerTrades);
6772
MinecraftForge.EVENT_BUS.addListener(this::registerWanderingTrades);
73+
74+
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::registerCommandArguments);
75+
}
76+
77+
private void registerCommandArguments (FMLCommonSetupEvent event) {
78+
79+
for (Map.Entry<ResourceLocation, Tuple<Class, ArgumentSerializer>> entry : this.commandArguments.getEntries().entrySet()) {
80+
81+
ArgumentTypes.register(entry.getKey().toString(), entry.getValue().getA(), entry.getValue().getB());
82+
}
6883
}
6984

7085
private void registerVillagerTrades(VillagerTradesEvent event) {

0 commit comments

Comments
 (0)