向Minecraft Mod(1.15.2)添加块的问题

问题描述 投票:0回答:1

我花了最后几个小时向我的Minecraft Mod添加一个块。我看了几本教程,但都没有用。这些图块不会添加到广告资源中,我也无法通过命令进行设置。不幸的是,我在控制台中没有可以在此处显示的任何错误。在某个时候,我放弃了并试图做盔甲,这是同样的问题。另一方面:正常项目起作用(您可以看到唤醒被发现者的项目“红宝石”)。

这里是我的主班代码:

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
1个回答
0
投票

世界上的方块与库存中的“方块”是完全不同的东西。世界上的一个块由IBlockState表示,其行为由Block实例定义。同时,库存中的物料是由物料控制的ItemStack。作为Block和Item不同世界之间的桥梁,存在ItemBlock类。 ItemBlock是Item的子类,它具有一个字段块,该字段块包含对其表示的Block的引用。 ItemBlock将“块”的某些行为定义为项目,例如右键单击放置块的方式。可能会有一个没有ItemBlock的Block。 (例如minecraft:water存在一个块,但不是一个项目。因此,不可能将其作为一个整体保存在清单中。)

注册块时,仅注册块。该块不会自动具有ItemBlock。要为一个块创建一个基本的ItemBlock,应使用新的ItemBlock(block).setRegistryName(block.getRegistryName())。未本地化的名称与块的名称相同。也可以使用ItemBlock的自定义子类。一旦为块注册了ItemBlock,就可以使用Item.getItemFromBlock检索它。如果该块没有ItemBlock,则Item.getItemFromBlock将返回null,因此,如果不确定使用的块是否有ItemBlock,请检查是否为null。

来自https://mcforge.readthedocs.io/en/latest/blocks/blocks/

简而言之,如果一切正常,您的方块应该出现在您的位置

© www.soinside.com 2019 - 2024. All rights reserved.