У меня настроен Creeper_meat.json, и элемент правильно инициализируется в moditems.java (по крайней мере, так кажется)Файл Creatures.java:
Код: Выделить всё
package net.noritei.creatures;
import net.minecraft.world.item.CreativeModeTabs;
import net.noritei.creatures.item.moditems;
import org.slf4j.Logger;
import com.mojang.logging.LogUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.world.level.block.Blocks;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.BuildCreativeModeTabContentsEvent;
import net.minecraftforge.event.server.ServerStartingEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.ForgeRegistries;
// The value here should match an entry in the META-INF/mods.toml file
@Mod(creatures.modId)
public class creatures {
// Define mod id in a common place for everything to reference
public static final String modId = "creatures";
// Directly reference a slf4j logger
private static final Logger LOGGER = LogUtils.getLogger();
public creatures(FMLJavaModLoadingContext context) {
IEventBus modEventBus = context.getModEventBus();
moditems.register(modEventBus);
// Register the commonSetup method for modloading
modEventBus.addListener(this::commonSetup);
// Register ourselves for server and other game events we are interested in
MinecraftForge.EVENT_BUS.register(this);
// Register the item to a creative tab
modEventBus.addListener(this::addCreative);
// Register our mod's ForgeConfigSpec so that Forge can create and load the config file for us
context.registerConfig(ModConfig.Type.COMMON, Config.SPEC);
}
private void commonSetup(final FMLCommonSetupEvent event) {
// Some common setup code
LOGGER.info("HELLO FROM COMMON SETUP");
if (Config.logDirtBlock)
LOGGER.info("DIRT BLOCK >> {}", ForgeRegistries.BLOCKS.getKey(Blocks.DIRT));
LOGGER.info(Config.magicNumberIntroduction + Config.magicNumber);
Config.items.forEach((item) -> LOGGER.info("ITEM >> {}", item.toString()));
}
private void addCreative(BuildCreativeModeTabContentsEvent event) {
if (event.getTabKey() == CreativeModeTabs.FOOD_AND_DRINKS) {
// Access the registered item correctly using .get()
event.accept(moditems.CREEPERMEAT.get());
}
}
// You can use SubscribeEvent and let the Event Bus discover methods to call
@SubscribeEvent
public void onServerStarting(ServerStartingEvent event) {
// Do something when the server starts
LOGGER.info("HELLO from server starting");
}
// You can use EventBusSubscriber to automatically register all static methods in the class annotated with @SubscribeEvent
@Mod.EventBusSubscriber(modid = modId, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public static class ClientModEvents {
@SubscribeEvent
public static void onClientSetup(FMLClientSetupEvent event) {
// Some client setup code
LOGGER.info("HELLO FROM CLIENT SETUP");
LOGGER.info("MINECRAFT NAME >> {}", Minecraft.getInstance().getUser().getName());
}
}
}
Код: Выделить всё
package net.noritei.creatures.item;
import net.minecraft.world.item.Item;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.noritei.creatures.creatures;
// Register items in the mod
public class moditems {
// Create a Deferred Register to hold items
public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, creatures.modId);
// Register the item (Creeper Meat in this case)
public static final RegistryObject CREEPERMEAT = ITEMS.register("creeper_meat",
() -> new Item(new Item.Properties()
.useItemDescriptionPrefix() // Ensures item description is prefixed
.setId(ResourceKey.create(ForgeRegistries.ITEMS.getRegistryKey(), ResourceLocation.parse("creatures:creeper_meat")))));
// Register all items in the event bus
public static void register(IEventBus eventBus) {
// Register the Deferred Register to the event bus so that the items get registered
ITEMS.register(eventBus);
}
}
Код: Выделить всё
{
"parent": "item/generated",
"textures": {
"layer0": "creatures:item/creeper_meat"
}
}
Код: Выделить всё
├───java
│ └───net
│ └───noritei
│ └───creatures
│ │ Config.java
│ │ creatures.java
│ │
│ └───item
│ moditems.java
│
└───resources
│ pack.mcmeta
│
├───assets
│ └───creatures
│ ├───lang
│ │ en_us.json
│ │
│ ├───models
│ │ └───item
│ │ creeper_meat.json
│ │
│ └───textures
│ └───item
│ creeper_meat.png
│
└───META-INF
mods.toml
Вот мой репозиторий на GitHub:
https://github.com/johnnythesoap/creatures
Я просмотрел кучу руководств, поискал в Интернете и часто задавал вопросы в чате, но, похоже, нашел либо бесполезные, либо устаревшие ресурсы. Я бы отладил это сам, но я едва знаю Java.
Это руководство, которому я сейчас следую, чтобы изучить моддинг:
https://www.youtube.com/watch ?v=o6Xbp2dTEGA&list=PLKGarocXCE1H9Y21-pxjt5Pt8bW14twa-&index=7
Большое спасибо.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -forge-mod
Мобильная версия