
快速開始
本指南詳細介紹了如何實現 Delight Lib 以簡化 Farmer's Delight 附加模組的創建。它涵蓋了內容註冊的流暢 API 和庫的內部架構。
Delight Lib 的工作原理
Delight Lib 的設計旨在通過自動化重複的任務(註冊和資源生成)來消除 Minecraft 模組開發的樣板代碼。
集中註冊管理
與其為物品、方塊和方塊實體手動管理多個 DeferredRegister 對象,DelightAddon 類充當單一控制點。初始化時,它會處理所有必要註冊的設置並自動將它們附加到模組事件總線。
建造者和內存映射模式
當使用 .food() 或 .cabinet() 等建造者時,調用 .build() 執行兩個主要操作:
- 它將對象及其相關組件註冊到遊戲
- 它將對象屬性保存到內部內存映射中。
自動化數據管道
庫會自動監聽 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.toml 或 mods.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.
小刀
KnifeBuilder 允許創建具有自定義戰鬥統計和屬性的工具。
// 普通的小刀
addon.knife("copper_knife", Tiers.STONE).build();
// 具有自定義屬性的小刀
addon.knife("netherite_knife", Tiers.NETHERITE)
.attackDamage(1.5f)
.attackSpeed(-1.8f)
.fireResistant()
.build();4.
食物
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 文件夾中。
派
派需要先註冊一個切片物品。
// 先註冊食物切片物品
addon.food("cherry_pie_slice")
.nutrition(3)
.saturation(0.3f)
.fast()
.build();
// 然後註冊可放置的派
addon.placeableFood("cherry_pie")
.asPie("cherry_pie_slice")
.build();
盛宴
盛宴可以提供一個餐具物品,並且在被消耗後可選擇留下容器。
// 先註冊帶有返回物品的食物物品
addon.food("stew_serving")
.nutrition(6)
.saturation(0.6f)
.bowlFood()
.build();
// 然後註冊可放置的盛宴
addon.placeableFood("stew_pot")
.asFeast("stew_serving", true) // 設為 true 表示它會留下容器(剩菜)
.build();6. 
創建作物
作物可以註冊生長階段和可選的食物屬性。
// 基本作物(自動生成種子物品)
addon.crop("corn").build();
// 可食用作物,其中種子和物品相同
addon.crop("onion")
.asFood(1, 0.1f)
.seedIsItem() // 可選,若調用此方法則種子和物品將相同,否則會生成一個新的種子物品
.build();7. 創建儲存方塊
這個庫簡化了櫥櫃、箱子和袋子的創建。所有儲存方塊在註冊期間都需要定義一個配方。
櫥櫃
櫥櫃是類似於桶的交互式儲存方塊。
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();
箱子和
袋子
箱子是堅固的木製容器,而袋子是基於羊毛的儲存方塊。
// 箱子
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. 添加配方
庫支持烹飪鍋、工作台有序與無序配方。
烹飪鍋
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();
工作台
// 有序配方
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/ 中。