Java 为什么我会得到;来自注册表的未经识别的地雷船地图:“block”;?

Java 为什么我会得到;来自注册表的未经识别的地雷船地图:“block”;?,java,minecraft,minecraft-forge,Java,Minecraft,Minecraft Forge,我正在学习如何编写Minecraft mods(版本1.14.4),并能够制作一个物品。现在我正试着制造一个积木。我现在关注的是1.14.3,但我认为它已经足够接近了 我当前遇到以下错误: [20Mar2020 14:09:10.522][Server thread/INFO][net.minecraftforge.registries.ForgeRegistry/registries]:注册表块:从世界中找到缺少的id examplemod:examplemod [20Mar2020 14:0

我正在学习如何编写Minecraft mods(版本1.14.4),并能够制作一个物品。现在我正试着制造一个积木。我现在关注的是1.14.3,但我认为它已经足够接近了

我当前遇到以下错误:

[20Mar2020 14:09:10.522][Server thread/INFO][net.minecraftforge.registries.ForgeRegistry/registries]:注册表块:从世界中找到缺少的id examplemod:examplemod [20Mar2020 14:09:10.613][Server thread/ERROR][net.minecraftforge.registries.GameData/registries]:来自注册表minecraft的未识别映射:block 示例模块:示例模块:676

我还可以在运行时看到:

我曾试图搞乱如何命名注册中心,但我似乎无法确定问题是什么。也许我没有正确格式化json文件

请注意,ItemList和BlockList只是包含我创建的每个块/项的静态实例的类

示例mod.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.");
    }
}
//此处的值应与META-INF/mods.toml文件中的条目匹配
@Mod(例如Mod.Mod\u ID)
公共类示例mod
{
//直接参考log4j记录器。
私有静态最终记录器Logger=LogManager.getLogger();
公共静态最终字符串MOD_ID=“examplemod”;
公共示例mod(){
//注册modloading的设置方法
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
//注册用于modloading的排队IMC方法
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueueIMC);
//为modloading注册processIMC方法
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::processIMC);
//注册doClientStuff方法以进行modloading
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff);
//注册我们感兴趣的服务器和其他游戏活动
MinecraftForge.EVENT_BUS.register(此);
}
专用作废设置(最终FMLCommonSetupEvent事件)
{
//一些preinit代码
LOGGER.info(“来自PREINIT的你好”);
LOGGER.info(“污垢块>>{}”,Blocks.DIRT.getRegistryName());
}
私有void doClientStuff(最终FMLClientSetupEvent事件){
//做一些只能在客户机上完成的事情
info(“获取游戏设置{}”,event.getMinecraftSupplier().get().gameSettings);
}
私有void排队IMC(最终模块间事件)
{
//将IMC分派给另一个mod的一些示例代码
InterModComms.sendTo(例如MOD.MOD_ID,“helloworld”,()->{LOGGER.info(“来自MDK的Hello world”);返回“Hello world”;});
}
私有void processIMC(最终InterModProcessEvent事件)
{
//从其他MOD接收和处理互调通信的一些示例代码
info(“Got IMC{}”,event.getIMCStream()。
映射(m->m.getMessageSupplier().get()。
collect(Collectors.toList());
}
//您可以使用SubscribeEvent并让事件总线发现要调用的方法
@认购人
服务器启动时的公共无效(FMLServerStartingEvent事件){
//在服务器启动时执行某些操作
LOGGER.info(“来自服务器启动的你好”);
}
//您可以使用EventBusSubscriber自动订阅包含类上的事件(这是订阅MOD
//事件总线(用于接收注册表事件)
@Mod.EventBusSubscriber(总线=Mod.EventBusSubscriber.bus.Mod)
公共静态类RegistryEvents{
@认购人
公共静态注册表(final RegistryEvent.Register blockItemEvent)
{
ItemList.bomb_item=新物品(new item.Properties().group(ItemGroup.COMBAT));
ItemList.bomb_item.setRegistryName(新资源位置(例如MOD.MOD_ID,“bomb_item”);
ItemList.summary_block=new BlockItem(BlockList.summary_block,new Item.Properties().group(ItemGroup.MISC));
ItemList.summary_block.setRegistryName(新的ResourceLocation(例如MOD.MOD_ID,“summary_block”);
blockItemEvent.getRegistry().registerAll(ItemList.bomb\u item,ItemList.summary\u block);
LOGGER.info(“已注册的项目”);
}
@认购人
BlocksRegistry上的公共静态无效(final RegistryEvent.Register blockRegistryEvent){
BlockList.神秘_block=新块(block.Properties.create(Material.CAKE)
.硬度和电阻(2.0f,2.0f)
.声音(SoundType.GLASS));
BlockList.summary_block.setRegistryName(新资源位置(MOD_ID,“summary_block”);
blockRegistryEvent.getRegistry().registerAll(BlockList.Unsery_块);
LOGGER.info(“块注册”);
}
}
}

blockstates/summary_block.json:

{ “变体”:{ "": { “模型”:“示例模块:块/神秘块” } } }

models/block/summary_block.json:

{ “父项”:“块/多维数据集”, “纹理”:{ “全部”:“示例模块:块/神秘块” } }

models/item/summary_block.json:

{ “父项”:“examplemod:块/神秘块”
}

所有这一切意味着,在某个点上,您有一个块注册为“examplemod:examplemod”,而现在您没有。您可以安全地忽略该消息。如果你开始一个新的世界而不是打开一个旧的世界,你就不会得到这个信息

顺便说一句,HarryTalks并不是一个学习mod(在线)的推荐方法。显然,他使用了一些坏习惯(我实际上没有使用它们)。
其他建议是,或者。

这意味着在某个时候,您有一个块注册为“examplemod:examplemod”,而现在您没有。您可以安全地忽略该消息。如果你开始一个新的世界而不是打开一个旧的世界,你就不会得到这个信息

顺便说一句,HarryTalks并不是一个学习mod(在线)的推荐方法。显然,他使用了一些坏习惯(我实际上没有使用它们)。
其他建议是,或者。

是的,我知道最好是pos