minecraft模组:01创建物品

前言

本页面基于minecraft1.21版本编写

通过fabric编写模组,创建一个自定义物品腐烂的苹果

  • 合成腐肉+苹果
  • 效果:食用后,80%的概率中毒

新建项目

选择Minecraft生成器, 选择对应的minecraft版本,frabic版本及模组名称等

创建物品类

main中创建一个类RottenApple来实现自定义物品

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public class RottenApple{
// 创建一个日志记录器
public static final Logger LOGGER = LoggerFactory.getLogger("MyMod");

// 定义一个静态的食物组件,用于表示腐烂的食物属性
public static final FoodComponent ROTTEN_FOOD_COMPONENT = new FoodComponent.Builder()
.alwaysEdible()
// 添加中毒状态效果,持续 6 秒(120 游戏刻),等级为 0,触发概率为 80%
.statusEffect(new StatusEffectInstance(StatusEffects.POISON, 6 * 20, 0), 0.8f)
.build();

// 用于在物品上添加自定义的提示信息
static class CustomToolTip extends Item {
static String tips;
public CustomToolTip(Settings settings, String tip) {
super(settings);
tips = tip;
}

@Override
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
tooltip.add(Text.translatable(tips).styled(s -> s.withColor(0x6D4C41)));
}
}

// 定义一个静态的腐烂苹果物品实例, 并通过 register 方法将该物品注册到游戏中
public static final Item RottenApple = register(
new CustomToolTip(new Item.Settings().food(ROTTEN_FOOD_COMPONENT), "腐烂的"),
"rotten_apple"
);

// 静态方法,用于注册物品到游戏的物品注册表中
public static Item register(Item item, String id) {
// 创建物品的标识符
Identifier itemID = Identifier.of("mymod", id);
// 将物品注册到游戏的物品注册表中,并返回注册后的物品实例
return Registry.register(Registries.ITEM, itemID, item);
}

// 初始化
public static void initialize() {
// 将物品添加到 FOOD_AND_DRINK 物品组中
ItemGroupEvents.modifyEntriesEvent(ItemGroups.FOOD_AND_DRINK)
.register((itemGroup) -> itemGroup.add(RottenApple));

// 将腐烂苹果物品添加到堆肥机会注册表中,有 30% 的概率增加堆肥器的等级
CompostingChanceRegistry.INSTANCE.add(RottenApple, 0.3f);

LOGGER.info("[DEBUG] 物品注册完成");
}

}

Mymod中进行模组初始化

1
2
3
4
5
6
7
public class Mymod implements ModInitializer {

@Override
public void onInitialize() {
RottenApple.initialize();
}
}

gradle中,选择fabric,运行runClient,进入游戏。新建游戏后,在物品栏中可以看到我们新建的物品。

但是此时,物品名称和纹理都还没有添加

添加翻译

main\resources\assets\mymod\lang文件夹中,新建一个en_us.json (如果文件夹不存在则新建)

写入翻译和名称

1
2
3
{
"item.mymod.rotten_apple": "RottenApple"
}

添加纹理和模型

模型

main\resources\assets\mymod\models\item文件夹中,新建一个rotten_apple.json(如果文件夹不存在则新建)

写入模型数据

1
2
3
4
5
6
{
"parent": "item/generated",
"textures": {
"layer0": "mymod:item/rotten_apple"
}
}
  • parent:模型要继承的模型。大多物品继承的模型是 item/generate, 也有其他的,比如 item/handheld,用于拿在玩家手中的物品,例如工具。
  • textures:为模型定义纹理的地方。 layer0 键是模型使用的纹理。

纹理

将纹理文件放在main\resources\assets\mymod\textures\item文件夹中,并命名为rotten_apple.png(如果文件夹不存在则新建)

需要注意的是:

  • 必须是png格式的文件
  • 像素需要是16×16或32×32

合成配方

通过腐肉 + 苹果 进行无序合成

main\resources\data\mymod\recipe文件夹中,新建一个rotten_apple.json(如果文件夹不存在则新建)

写入合成配方(无序合成)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "minecraft:rotten_flesh"
},
{
"item": "minecraft:apple"
}
],
"result": {
"id": "mymod:rotten_apple",
"count": 1
}
}

实现效果