我花了最后几个小时向我的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);
}
}
世界上的方块与库存中的“方块”是完全不同的东西。世界上的一个块由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/。
简而言之,如果一切正常,您的方块应该出现在您的位置