Minecraft-Java-Edition

Forge 1.16.4-35.1.28 配方不起作用

  • March 24, 2021

我對使用 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 模組中註冊物品的首選方式是使用延遲註冊系統(它會為您處理事件)。當您需要訪問程式碼中的項目時,您將需要使用 egModItems.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,而不是項目的根目錄中。此外,文件名必須全小寫。

引用自:https://gaming.stackexchange.com/questions/381843