首页 > 解决方案 > 将块添加到 Minecraft Mod (1.15.2) 的问题

问题描述

在过去的几个小时里,我一直在为我的 Minecraft Mod 添加一个方块。我看过几个教程,但没有一个有效。这些块没有添加到创意库存中,我也无法通过命令设置它们。不幸的是,我在控制台中没有可以在这里展示的任何错误。在某些时候,我放弃并尝试做盔甲,这里同样的问题。另一方面:正常项目工作(你可以看到唤醒 finde 的项目“ruby”)。

这是我的主要课程的代码:

package de.thom.clashOfClasses;

import de.thom.clashOfClasses.init.ArmorMaterialList;
import de.thom.clashOfClasses.init.BlockList;
import de.thom.clashOfClasses.init.ItemList;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

@Mod("clashofclasses")
public class ClashOfClasses {

    public static ClashOfClasses instance;
    public static final String modid = "clashofclasses";
    public static final Logger logger = LogManager.getLogger(modid);

    public ClashOfClasses() {
        instance = this;

        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::clientRegistries);
        MinecraftForge.EVENT_BUS.register(this);
    }

    public void setup(final FMLCommonSetupEvent event) {
        logger.info("Setup method complete");
    }

    public void clientRegistries(final FMLClientSetupEvent event) {
        logger.info("ClientRegistries method complete");
    }

    @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
    public static class RegistryEvents {

        @SubscribeEvent
        public static void registerItems(final RegistryEvent.Register<Item> event) {
            logger.info("Item Registry started");
            event.getRegistry().registerAll(
                    ItemList.RUBY,

                    ItemList.ruby_block = new BlockItem(BlockList.ruby_block,new Item.Properties().group(ItemGroup.MISC)).setRegistryName(BlockList.ruby_block.getRegistryName())
            );

            logger.info("Items registerd");
        }

        @SubscribeEvent
        public static void registerBlocks(final RegistryEvent.Register<Block> event) {
            logger.info("Block Registry started");
            event.getRegistry().registerAll
            (
                    BlockList.ruby_block = new Block(Block.Properties.create(Material.IRON).hardnessAndResistance(2.0f,3.0f).lightValue(5).sound(SoundType.METAL)).setRegistryName(location("ruby_block"))
            );

            logger.info("Blocks registerd");
        }

        private static ResourceLocation location(String name){
            return new ResourceLocation(ClashOfClasses.modid, name);
        }

    }
}

这是 BlockList 的代码

package de.thom.clashOfClasses.init;

import net.minecraft.block.Block;

public class BlockList {
    public static Block ruby_block;
}

这是ItemList的代码:

package de.thom.clashOfClasses.init;

import de.thom.clashOfClasses.ClashOfClasses;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.util.ResourceLocation;

public class ItemList
{
    //Test Items
    public static Item RUBY = new Item(new Item.Properties().group(ItemGroup.MATERIALS)).setRegistryName(location("ruby"));

    public static Item ruby_block;

    private static ResourceLocation location(String name){
        return new ResourceLocation(ClashOfClasses.modid, name);
    }
}

标签: minecraft-forge

解决方案


@ObjectHolder(modid)
@Mod.EventBusSunscriber(modid = modid, bus = Bus.Mod)
public class BlockInit {
  public static final Block example_block = null;

  @SubscribeEvent
  public static void registerBlocks(final RegistryEvent.Register<Block> event) {
    event.getRegistry().register(new Block(Block.Properties.create(Material)).setRegistry("example_block"));
  }

  @SubscribeEvent
  public static void registerBlockItems(final RegistryEvent.Register<Item> event){ 
  event.getRegistry().register(new BlockItem(example_item, new Item.Properties().group(ItemGroup)).setRegistry("example_block"));
  }

这对我有用,只需将 example_block 替换为您的块的名称并添加更多属性,如果您想要另一个块只需重复 event.getRegistry 内容并使用新块的名称而不是 example_block。并且不要忘记做 json 文件


推荐阅读