Minecraft 1.21.4 Forge模组自定义物品Creeper Meat纹理缺失(显示紫黑占位符)求助
Minecraft 1.21.4 Forge模组自定义物品Creeper Meat纹理缺失(显示紫黑占位符)求助
我正在开发我的第一个Minecraft模组,已经成功添加了名为Creeper Meat的物品,它能在创造物品栏里正常显示名称,但没有使用我放在src/main/resources/assets/creatures/textures/item/creeper_meat.png的纹理,反而显示紫黑占位符。
我已经配置了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()); } } }
moditems.java 文件
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<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, creatures.modId); // Register the item (Creeper Meat in this case) public static final RegistryObject<Item> 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); } }
creeper_meat.json 文件
{ "parent": "item/generated", "textures": { "layer0": "creatures:item/creeper_meat" } }
文件夹结构(creatures/src/下)
├── 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
运行客户端时的Gradle日志(无creeper_meat相关信息)
[31Dec2024 01:36:24.095] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher running: args [--launchTarget, forge_userdev_client, --version, MOD_DEV, --assetIndex, 19, --assetsDir, C:\Users\sacha\.gradle\caches\forge_gradle\assets, --gameDir, .] [31Dec2024 01:36:24.097] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: JVM identified as Eclipse Adoptium OpenJDK 64-Bit Server VM 21.0.5+11-LTS [31Dec2024 01:36:24.098] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher 10.2.2 starting: java version 21.0.5 by Eclipse Adoptium; OS Windows 11 arch amd64 version 10.0 [31Dec2024 01:36:24.177] [main/INFO] [net.minecraftforge.fml.loading.ImmediateWindowHandler/]: Loading ImmediateWindowProvider fmlearlywindow [net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator/]: No dependencies to load found. Skipping! [31Dec2024 01:36:25.921] [main/INFO] [cpw.mods.modlauncher.LaunchServiceHandler/MODLAUNCHER]: Launching target 'forge_userdev_client' with arguments [--version, MOD_DEV, --gameDir, ., --assetsDir, C:\Users\sacha\.gradle\caches\forge_gradle\assets, --assetIndex, 19] [31Dec2024 01:36:27.115] [Datafixer Bootstrap/INFO] [com.mojang.datafixers.DataFixerBuilder/]: 243 Datafixer optimizations took 344 milliseconds [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:worldgen/biome_source [31Dec2024 01:36:30.323] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:worldgen/chunk_generator [31Dec2024 01:36:30.323] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:worldgen/material_condition [31Dec2024 01:36:30.323] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:worldgen/material_rule [31Dec2024 01:36:30.323] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:worldgen/density_function_type [31Dec2024 01:36:30.324] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:block_type [31Dec2024 01:36:30.324] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:worldgen/structure_pool_element [31Dec2024 01:36:30.324] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:worldgen/pool_alias_binding [31Dec2024 01:36:30.324] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:cat_variant [31Dec2024 01:36:30.324] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:frog_variant [31Dec2024 01:36:30.324] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:decorated_pot_pattern [31Dec2024 01:36:30.324] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:creative_mode_tab [31Dec2024 01:36:30.324] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:trigger_type [31Dec2024 01:36:30.324] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:number_format_type [31Dec2024 01:36:30.324] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:entity_sub_predicate_type [31Dec2024 01:36:30.324] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:item_sub_predicate_type [31Dec2024 01:36:30.324] [pool-5-thread-1/INFO] [net.minecraftforge.registries.GameData/REGISTRIES]: minecraft:enchantment_level_based_value_type
备注:内容来源于stack exchange,提问作者Nori




