Matt Corby
Matt Corby

Reputation: 13202

Why do I get "Unidentified mapping from registry minecraft:block"?

I am learning how to write Minecraft mods (version 1.14.4) and was able to make an item. Now I am trying to make a block. I am following this tutorial video which actually covers 1.14.3, but I thought it would be close enough.

I am currently getting this error:

[20Mar2020 14:09:10.522] [Server thread/INFO] [net.minecraftforge.registries.ForgeRegistry/REGISTRIES]: Registry Block: Found a missing id from the world examplemod:examplemod [20Mar2020 14:09:10.613] [Server thread/ERROR] [net.minecraftforge.registries.GameData/REGISTRIES]: Unidentified mapping from registry minecraft:block examplemod:examplemod: 676

I also get presented with this at runtime: enter image description here

I have tried messing around with how i'm naming the registries but I just can't seem to pin down what the issue is. Maybe i'm not formatting my json files correctly?

Note that ItemList and BlockList are just classes that contain static instances of each Block/Item I have created.

ExampleMod.java:

// The value here should match an entry in the META-INF/mods.toml file
@Mod(ExampleMod.MOD_ID)
public class ExampleMod
{
// Directly reference a log4j logger.
private static final Logger LOGGER = LogManager.getLogger();

public static final String MOD_ID = "examplemod";

public ExampleMod() {
    // Register the setup method for modloading
    FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
    // Register the enqueueIMC method for modloading
    FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueueIMC);
    // Register the processIMC method for modloading
    FMLJavaModLoadingContext.get().getModEventBus().addListener(this::processIMC);
    // Register the doClientStuff method for modloading
    FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff);

    // Register ourselves for server and other game events we are interested in
    MinecraftForge.EVENT_BUS.register(this);
}

private void setup(final FMLCommonSetupEvent event)
{
    // some preinit code
    LOGGER.info("HELLO FROM PREINIT");
    LOGGER.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName());
}

private void doClientStuff(final FMLClientSetupEvent event) {
    // do something that can only be done on the client
    LOGGER.info("Got game settings {}", event.getMinecraftSupplier().get().gameSettings);
}

private void enqueueIMC(final InterModEnqueueEvent event)
{
    // some example code to dispatch IMC to another mod
    InterModComms.sendTo(ExampleMod.MOD_ID, "helloworld", () -> { LOGGER.info("Hello world from the MDK"); return "Hello world";});
}

private void processIMC(final InterModProcessEvent event)
{
    // some example code to receive and process InterModComms from other mods
    LOGGER.info("Got IMC {}", event.getIMCStream().
            map(m->m.getMessageSupplier().get()).
            collect(Collectors.toList()));
}
// You can use SubscribeEvent and let the Event Bus discover methods to call
@SubscribeEvent
public void onServerStarting(FMLServerStartingEvent event) {
    // do something when the server starts
    LOGGER.info("HELLO from server starting");
}

// 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 onItemsRegistry(final RegistryEvent.Register<Item> blockItemEvent)
    {
        ItemList.bomb_item = new Item(new Item.Properties().group(ItemGroup.COMBAT));
        ItemList.bomb_item.setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "bomb_item"));

        ItemList.mystery_block = new BlockItem(BlockList.mystery_block, new Item.Properties().group(ItemGroup.MISC));
        ItemList.mystery_block.setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "mystery_block"));

        blockItemEvent.getRegistry().registerAll(ItemList.bomb_item, ItemList.mystery_block);

        LOGGER.info("Items registered.");
    }

    @SubscribeEvent
    public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) {
        BlockList.mystery_block = new Block(Block.Properties.create(Material.CAKE)
                                            .hardnessAndResistance(2.0f, 2.0f)
                                            .sound(SoundType.GLASS));

        BlockList.mystery_block.setRegistryName(new ResourceLocation(MOD_ID, "mystery_block"));

        blockRegistryEvent.getRegistry().registerAll(BlockList.mystery_block);

        LOGGER.info("Blocks registered.");
    }
}

}

blockstates/mystery_block.json:

{ "variants": { "": { "model": "examplemod:block/mystery_block" } } }

models/block/mystery_block.json:

{ "parent": "block/cube_all", "textures": { "all": "examplemod:block/mystery_block" } }

models/item/mystery_block.json:

{ "parent": "examplemod:block/mystery_block" }

Upvotes: 0

Views: 12710

Answers (1)

Alpvax
Alpvax

Reputation: 172

All that means is that at some point you had a block registered as "examplemod:examplemod", and now you don't. You can safely ignore the message. If you start a new world instead of opening an old one, you won't get that message.

As an aside, HarryTalks is not a recommended way to learn to mod (on the Minecraft Forge forums ). Apparently he uses several bad practices (I have not actually used them). Alternative suggestions are Cadiboo's example mod, or McJty's tutorials.

Upvotes: 3

Related Questions