示例
提醒
基于minecraft1.21版本
通过fabric编写模组,创建一个自定义物品腐烂的苹果
- 合成:
腐肉+苹果 - 效果:食用后,80%的概率
中毒
新建项目
选择Minecraft生成器, 选择对应的minecraft版本,frabic版本及模组名称等

创建物品类
在main中创建一个类RottenApple来实现自定义物品
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中进行模组初始化
public class Mymod implements ModInitializer {
@Override
public void onInitialize() {
RottenApple.initialize();
}
}
在gradle中,选择fabric,运行runClient,进入游戏。新建游戏后,在物品栏中可以看到我们新建的物品。

但是此时,物品名称和纹理都还没有添加
添加翻译
在main\resources\assets\mymod\lang文件夹中,新建一个en_us.json (如果文件夹不存在则新建)
写入翻译和名称
{
"item.mymod.rotten_apple": "RottenApple",
}

添加纹理和模型
模型
在main\resources\assets\mymod\models\item文件夹中,新建一个rotten_apple.json(如果文件夹不存在则新建)
写入模型数据
{
"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(如果文件夹不存在则新建)
写入合成配方(无序合成)
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "minecraft:rotten_flesh",
},
{
"item": "minecraft:apple",
},
],
"result": {
"id": "mymod:rotten_apple",
"count": 1,
},
}

实现效果


评论区
评论加载中...