我的世界fabric-1.21.1mod制作心得二——创造物品栏

前言


如果您没有mod制作经验,那么在看本期前建议看一下上期心得。

上回我们成功注册了物品,成功在我的世界中添加了新物品。但是我们却没法从在创造模式物品栏中取出来,只能通过/give命令间接获得。本期我们将通过‘ fabricAPI ’,将物品添加到创造模式物品栏中。并注册我们自己的创造模式物品栏。


主要java代码

AModItems.java

让我们先尝试把物品添加到原版的创造模式物品栏,这需要借助fabric的API。

在上期我们创建的物品注册文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private static void addItemGroup(FabricItemGroupEntries entries){
entries.add(物品常量名);
}
// 上面这个方法中的代码是原版的添加代码,因为原版的物品添加是和物品栏注册写在一起的。
// 我们当然不能直接修改原版代码,所以我们需要通过fabric的API调用这个方法,间接的添加物品。

public static void registerItems(){
ItemGroupEvents
.modifyEntriesEvent(ItemGroups.NATURAL)
.register(AModItems::addItemGroup);
}
// 这里的方法相信大家是很眼熟的,这个方法就是我们上期写的那个空的初始化方法,现在我们需要让它担任更多的工作。
// 这里需要注意的就是ItemGroups.NATURAL,这个字段代表了原版物品类栏。NATURAL是自然物品的物品栏。
// AModItems::addItemGroup这里就是调用了上面的物品添加代码。

AModItemGroups.java

如果您需要创建新的创造模式物品栏,那么请创建AModItemGroups.java文件。

这里的物品栏创建建议和原版一样,虽然稍显繁琐。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public static final RegistryKey<ItemGroup> A_GROUP = register("A_group");
// 上面创建物品栏常量,调用下面的注册方法。

private static RegistryKey<ItemGroup> register(String id){
return RegistryKey.of(RegistryKeys.ITEM_GROUP, new Identifier(AMod.MOD_ID, id));
// 这里是注册方法。
}

public static void registerGroups(){
// 这是辅助注册方法。
Registry.register(
Registries.ITEM_GROUP,
A_GROUP,// 这是上面的常量。
ItemGroup.create(null, -1)// 这里create方法第一个参数是物品栏在上侧和下侧,第二个是编号。
// 这里的(null,-1)写法是fabric特有写法,在最后的物品栏后面增加一个。

.displayName(Text.translatable("itemGroup.celestial_group"))
// 这里是物品栏显示的名字,这里是可翻译的。意思是可以同过语言文件夹翻译。

.icon(() -> new ItemStack(AModItems.物品常量名))
// 这里是物品栏的显示图标,指向一个物品的图标。

.entries((displayContext, entries) -> {
// 在这里添加物品。
entries.add(AModItems.物品常量名);
// 这条语句和上个文件里一样,是往物品栏里添加物品的方法。
}).build());// 最后加个build();
}
// 注意括号,别多了或少了。

AMod.java

我们的辅助注册方法需要调用,我们在模组文件里调用。

1
2
3
4
5
6
7
8
9
10
public void onInitialize() {
// This code runs as soon as Minecraft is in a mod-load-ready state.
// However, some things (like resources) may still be uninitialized.
// Proceed with mild caution.
AModItems.registerItems();// 物品注册初始化

AModItemGroups.registerGroups();// 物品栏辅助注册方法

LOGGER.info("Hello Fabric world!");
}

配置json文件

语言文件

如果您不知道,可以看上期。

如:en_us.json

1
2
3
4
{
"item.A-mod.物品id": "译名",
"itemGroup.A_group": "译名",
}

语言文件可以直接写在大括号里,和物品翻译在一起。

注意

以上就完成了物品栏注册的全过程。如果您出现物品栏注册失效,翻译失效。但代码没有问题,可以尝试重启IDEA。