注册方块和物品
约 507 字大约 2 分钟
2025-09-30
在主类中:
import net.emtips.leespeaker.Init.BlockInit;
import net.emtips.leespeaker.Init.ItemInit;
//物品注册
ItemInit.ITEMS.register(modEventBus);
//方块注册
BlockInit.BLOCKS.register(modEventBus);
注册创造模式物品分类栏:
public static final CreativeModeTab LeeSpeaker = new CreativeModeTab(MODID) {
@Override
public ItemStack makeIcon() {
//这个是物品栏的图标使用哪个物品来展示
return new ItemStack(BlockInit.SPEAKER_BLOCK.get());
}
};
新建net.emtips.leespeaker.Init包 BlockInit类:
package net.emtips.leespeaker.Init;
import net.emtips.leespeaker.CustomBlock.Speaker_Block;
import net.emtips.leespeaker.Main;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.DyeColor;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.StainedGlassBlock;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import java.util.function.Function;
import java.util.function.Supplier;
public class BlockInit{
public static DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, Main.MODID);
public static final DeferredRegister<Item> ITEMS = ItemInit.ITEMS;
//第一个方块 of(方块和什么类似,方块颜色) strength(挖掘时长(越大时间越长),防爆等级(越大越防爆)) sound(挖方块的声音) noOcclusion(非实体方块)
public static final RegistryObject<Block> SPEAKER_BLOCK = register("speaker_block",
() -> new Speaker_Block(BlockBehaviour.Properties.of(Material.METAL).strength(1f, 1f)
.sound(SoundType.CHAIN).requiresCorrectToolForDrops().noOcclusion()),
object -> () -> new BlockItem(object.get(), new Item.Properties().tab(Main.LeeSpeaker)));
private static <T extends Block> RegistryObject<T> registerBlock(final String name,
final Supplier<? extends T> block) {
return BLOCKS.register(name, block);
}
private static <T extends Block> RegistryObject<T> register(final String name, final Supplier<? extends T> block,
Function<RegistryObject<T>, Supplier<? extends Item>> item) {
RegistryObject<T> obj = registerBlock(name, block);
ITEMS.register(name, item.apply(obj));
return obj;
}
private static <T extends Block> RegistryObject<T> registerBlock(String name, Supplier<T> block, CreativeModeTab tab) {
RegistryObject<T> toReturn = BLOCKS.register(name, block);
registerBlockItem(name, toReturn, tab);
return toReturn;
}
private static <T extends Block> RegistryObject<Item> registerBlockItem(String name, RegistryObject<T> block,
CreativeModeTab tab) {
return ItemInit.ITEMS.register(name, () -> new BlockItem(block.get(),
new Item.Properties().tab(tab)));
}
private static <T extends Block> RegistryObject<T> registerBlockWithoutBlockItem(String name, Supplier<T> block) {
return BLOCKS.register(name, block);
}
public static Supplier<Block> createStainedGlassFromColor(DyeColor color) {
return () -> new StainedGlassBlock(color, BlockBehaviour.Properties.of(Material.GLASS, color).strength(0.3F)
.sound(SoundType.GLASS).noOcclusion().isValidSpawn(BlockInit::never).isRedstoneConductor(BlockInit::never).isSuffocating(BlockInit::never).isViewBlocking(BlockInit::never));
}
public static boolean always(BlockState state, BlockGetter reader, BlockPos pos) {
return true;
}
public static boolean never(BlockState state, BlockGetter reader, BlockPos pos) {
return false;
}
public static boolean always(BlockState state, BlockGetter reader, BlockPos pos, EntityType<?> entityType) {
return true;
}
public static boolean never(BlockState state, BlockGetter reader, BlockPos pos, EntityType<?> entityType) {
return false;
}
}
ItemInit类:
package net.emtips.leespeaker.Init;
import net.emtips.leespeaker.CustomItem.Configtool;
import net.emtips.leespeaker.Main;
import net.minecraft.world.item.Item;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import java.util.function.Supplier;
public class ItemInit {
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, Main.MODID);
//第一个物品
public static final RegistryObject<Item> LEI = register("tool",
() -> new Configtool(new Item.Properties().tab(Main.LeeSpeaker)));
private static <T extends Item> RegistryObject<T> register(final String name, final Supplier<T> item) {
return ITEMS.register(name, item);
}
}
版权所有
版权归属:Ashley Lee