跳至主要內容

快速開始

芒果凍布丁2026/5/17大約 7 分鐘說明文件DelightLib新手教學快速開始

本指南詳細介紹了如何實現 Delight Lib 以簡化 Farmer's Delight 附加模組的創建。它涵蓋了內容註冊的流暢 API 和庫的內部架構。

Delight Lib 的工作原理

Delight Lib 的設計旨在通過自動化重複的任務(註冊和資源生成)來消除 Minecraft 模組開發的樣板代碼。

集中註冊管理

與其為物品、方塊和方塊實體手動管理多個 DeferredRegister 對象,DelightAddon 類充當單一控制點。初始化時,它會處理所有必要註冊的設置並自動將它們附加到模組事件總線。

建造者和內存映射模式

當使用 .food().cabinet() 等建造者時,調用 .build() 執行兩個主要操作:

  1. 它將對象及其相關組件註冊到遊戲
  2. 它將對象屬性保存到內部內存映射中。

自動化數據管道

庫會自動監聽 GatherDataEvent。在此階段,它會讀取存儲在內存映射中的元數據,並使用自定義 DataProviders 生成:

  • 方塊狀態和模型 JSON:櫥櫃、箱子和作物的標準方向。
  • 掉落表:抗爆炸掉落和複雜的作物收割邏輯。
  • 配方:工作台和烹飪鍋的 .json 文件。
  • 語言文件:對 en_us.json 的註冊名稱自動進行標題大小寫轉換。

1. 依賴項

build.gradle 文件中添加以下內容以鏈接 Farmer's Delight 和 Delight Lib:

dependencies {
    implementation "curse.maven:farmers-delight-XXXXXXX:YYYYYYY"
    implementation "curse.maven:delight-lib-XXXXXXX:YYYYYYY"
}

neoforge.mods.tomlmods.toml 文件中聲明所需的依賴項:

[[dependencies.yourmodid]]
modId="delightlib"
type="required"
versionRange="*"

[[dependencies.yourmodid]]
modId="farmersdelight"
type="required"
versionRange="*"

2. 主類別入口點

在主模組構造函數中使用 DelightAddon 初始化庫。這將處理註冊和創意標籤的設置。

@Mod("mymod")
public class MyMod {
    public MyMod(IEventBus bus, ModContainer container) {
        var addon = DelightAddon.create("mymod", bus)
            .withCreativeTab("My Mod", () -> new ItemStack(Items.BREAD));
        
        // 註冊內容使用 addon 實例
    }
}

3. iron-knife.png 小刀

KnifeBuilder 允許創建具有自定義戰鬥統計和屬性的工具。

// 普通的小刀
addon.knife("copper_knife", Tiers.STONE).build();

// 具有自定義屬性的小刀
addon.knife("netherite_knife", Tiers.NETHERITE)
    .attackDamage(1.5f)
    .attackSpeed(-1.8f)
    .fireResistant()
    .build();

4. fried-egg.png 食物

FoodBuilder 為標準食物、碗餐和飲料提供了全面的 API。

// 簡單的食物
addon.food("fried_egg")
    .nutrition(4)
    .saturation(0.4f)
    .fast()
    .build();

// 帶有營養效果的碗裝食物
addon.food("beef_stew")
    .nutrition(12)
    .saturation(0.8f)
    .bowlFood() // 將碗設為返回物品並將最大堆疊數量設為 16
    .withNourishment(FoodDuration.MEDIUM)
    .build();

// 可飲用的物品
addon.food("apple_juice")
    .nutrition(2)
    .saturation(0.2f)
    .drinkable() // 將玻璃瓶設為返回物品並將最大堆疊數量設為 16
    .alwaysEdible()
    .build();

高級食物功能

您可以使用以下方法進一步自定義食物行為:

  • withEffect(Holder effect, int duration, int amplifier, float chance):添加自定義生物效果。
  • stacksTo(int size):設置最大堆疊大小。
  • hideEffectTooltip():從物品工具提示中刪除自動效果信息。
  • customTooltip():表示將通過本地化提供自定義工具提示。

5. 創建可放置的食物物品

像派或盛宴這樣的可放置食物可以切片或分為三個階段消耗,模型和紋理必須手動添加到 models/block 文件夾中。

apple-pie.png slice-of-apple-pie.png

派需要先註冊一個切片物品。

// 先註冊食物切片物品
addon.food("cherry_pie_slice")
    .nutrition(3)
    .saturation(0.3f)
    .fast()
    .build();

// 然後註冊可放置的派
addon.placeableFood("cherry_pie")
    .asPie("cherry_pie_slice")
    .build();

steak-and-potatoes.png 盛宴

盛宴可以提供一個餐具物品,並且在被消耗後可選擇留下容器。

// 先註冊帶有返回物品的食物物品
addon.food("stew_serving")
    .nutrition(6)
    .saturation(0.6f)
    .bowlFood()
    .build();

// 然後註冊可放置的盛宴
addon.placeableFood("stew_pot")
    .asFeast("stew_serving", true) // 設為 true 表示它會留下容器(剩菜)
    .build();

6. tomato.pngtomato-seeds.png 創建作物

作物可以註冊生長階段和可選的食物屬性。

// 基本作物(自動生成種子物品)
addon.crop("corn").build();

// 可食用作物,其中種子和物品相同
addon.crop("onion")
    .asFood(1, 0.1f)
    .seedIsItem() // 可選,若調用此方法則種子和物品將相同,否則會生成一個新的種子物品
    .build();

7. 創建儲存方塊

這個庫簡化了櫥櫃、箱子和袋子的創建。所有儲存方塊在註冊期間都需要定義一個配方。

oak-cabinet.png 櫥櫃

櫥櫃是類似於桶的交互式儲存方塊。

addon.cabinet("spruce_cabinet")
    .soundType(SoundType.WOOD)
    .burnTime(300)
    .recipe(b -> b.grid("SSS", "T T", "SSS")
        .define('S', "minecraft:spruce_slab")
        .define('T', "minecraft:spruce_trapdoor"))
    .build();

cabbage-crate.png 箱子和 rice-bag.png 袋子

箱子是堅固的木製容器,而袋子是基於羊毛的儲存方塊。

// 箱子
addon.crate("tomato_crate")
    .recipe(b -> b.grid("###", "###", "###")
        .define('#', "mymod:tomato"))
    .build();

// 羊毛袋
addon.bag("rice_bag")
    .recipe(b -> b.grid("###", "###", "###")
        .define('#', "farmersdelight:rice"))
    .build();

8. 添加配方

庫支持烹飪鍋、工作台有序與無序配方。

cooking-pot.png 烹飪鍋

addon.cookingRecipe("beef_stew")
    .addIngredient("minecraft:cooked_beef")
    .addIngredient("minecraft:carrot")
    .addIngredient("minecraft:potato")
    .result("mymod:beef_stew")
    .container("minecraft:bowl")
    .experience(1.0f)
    .cookingTime(200)
    .recipeBookTab("meals")
    .build();

crafting-table.png 工作台

// 有序配方
addon.shapedRecipe("example_tool")
    .grid(" I ", " S ", " S ")
    .define('I', "minecraft:iron_ingot")
    .define('S', "minecraft:stick")
    .result("mymod:iron_staff")
    .build();

// 無序配方
addon.shapelessRecipe("mixed_seeds")
    .addIngredient("minecraft:wheat_seeds")
    .addTagIngredient("forge:seeds")
    .result("mymod:seed_bundle", 2)
    .build();

9. 生成檔案

庫通過 DataGen 自動創建模型、戰利品表和翻譯。運行以下命令以同步這些檔案:

gradlew runData

生成的文件輸出到 src/generated/resources。PNG 材質等資產應放置在 src/main/resources/assets/[modid]/textures/ 中。

最近更新:
貢獻者: EvanHsieh0415