You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动