Forge 1.16.4-35.1.28 配方不起作用
我對使用 forge 進行改裝很陌生,所以這個問題可能很愚蠢或愚蠢。
首先是我的文件:(位於 ~/forge-1.16.4-35.1.28-mdk/data/chemc/recipes/H2_O2__H2O.json)
{ "type": "minecraft:crafting_shapeless", "ingredients": [ { "item": "chemc:hydrogen" }, { "item": "chemc:oxygen" } ], "result": { "item": "minecraft:water_bucket" } }
問題是,當我載入遊戲並切換到生存模式時,更多的是嘗試將氫氣和氧氣結合起來製作水桶,但似乎無法製作。
假設這些物品已正確註冊,因為我可以在遊戲中獲得它們。主 Mod 文件,以便您可以看到項目的未本地化名稱。
package com.***.***.mcmods.chemc; import com.***.***.mcmods.chemc.items.Hydrogen; import com.***.***.mcmods.chemc.items.Oxygen; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.Item.Properties; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; // The value here should match an entry in the META-INF/mods.toml file @Mod(CheMC.modid) public class CheMC { public static final String modid = "chemc"; static Item i_h = new Hydrogen(new Properties()).setRegistryName("chemc", "hydrogen"); static Item i_o = new Oxygen(new Properties()).setRegistryName("chemc", "oxygen"); public CheMC() { FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup); MinecraftForge.EVENT_BUS.register(this); } private void setup(final FMLCommonSetupEvent event) { } // You can use EventBusSubscriber to automatically subscribe events on the // contained class (this is subscribing to the MOD // Event bus for receiving Registry Events) @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public static class RegistryEvents { @SubscribeEvent public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) { // register a new block here // blockRegistryEvent.getRegistry().registerAll(); } @SubscribeEvent public static void onItemsRegistry(final RegistryEvent.Register<Item> itemRegistryEvent) { // register a new item here itemRegistryEvent.getRegistry().registerAll(i_h,i_o); } } }
我查看的文件:ReadTheDocs Forge 1.16
./gradlew runClient –full-stacktrace –debug –info –parallel 的輸出
任何答案將不勝感激!
在新的 Forge 模組中註冊物品的首選方式是使用延遲註冊系統(它會為您處理事件)。當您需要訪問程式碼中的項目時,您將需要使用 eg
ModItems.HYDROGEN.get()
而不是簡單的ModItems.HYDROGEN
.// The value here should match an entry in the META-INF/mods.toml file @Mod(CheMC.MODID) public class CheMC { public static final String MODID = "chemc"; public CheMC() { FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup); MinecraftForge.EVENT_BUS.register(this); ModItems.init(); } private void setup(final FMLCommonSetupEvent event) { } } public class ModItems { public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, CheMC.MODID); public static final ItemGroup ITEM_GROUP = new ItemGroup(CheMC.MODID) { @Override public ItemStack createIcon() { // pick any item here, it will be the icon for your creative tab return new ItemStack(HYDROGEN.get()); } }; public static void init() { ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus()); } public static final RegistryObject<Hydrogen> HYDROGEN = ITEMS.register("hydrogen", () -> new Hydrogen(new Properties().group(ITEM_GROUP))); public static final RegistryObject<Oxygen> OXYGEN = ITEMS.register("oxygen", () -> new Oxygen(new Properties().group(ITEM_GROUP))); }
我還為您將項目系統資料庫分離到一個單獨的類中,並更改了一些命名約定以適應最佳實踐。請注意,您不需要為每個 Item 創建單獨的類,除非您覆蓋類中的某些方法,您可以只使用 new Item。但我不知道你的其餘程式碼,所以我沒有改變它。
(另外,只是一個設計說明:您的食譜為使用者提供了一個免費的桶,可以在清空後重複使用。您可能需要在配料中添加一個空桶)
編輯:……我剛剛意識到我沒有回答你關於食譜問題的問題(我誤讀了你文章的另一部分,暗示他們沒有正確註冊 - 如果他們工作,那很好,儘管你可能仍然會發現當您添加更多項目時,延遲的基於系統資料庫的系統更具可擴展性。)
數據文件夾需要位於 下
src/main/resources
,而不是項目的根目錄中。此外,文件名必須全小寫。