的NeoForge1.20.4Mod开发的视频,这篇教程是我边学边总结的,与其说是教程更像我的学习笔记,如有不清楚的地方,大家可以在评论区提问。在我力所能及的范围内,我都会解答的。
位置:examplemod->block->custom
IDEA自动实现父类构造器时是有参数的,但我们可以改成无参构造,就像下面的样子
public class RubyBlock extends Block {
public RubyBlock() {//这整块是在设置 这个方块的属性(Properties)
super(Properties.ofFullCopy(Blocks.STONE)//从原版的 石头方块(stone) 复制一套完整的方块属性出来
.strength(5f)//影响方块硬度和爆炸抗性
.requiresCorrectToolForDrops()//没有使用合适的工具来破坏这个方块,它不会掉落任何东西
);
}
}
它继承了 Minecraft 的 Block 类,因为所有方块都是 Block 的子类。
然后,我们还需要为这个方块创建一个对应的物品形式,这样玩家才能在游戏中捡起和使用它。我们使用BlockItem来关联物品和方块。
在ModItems中加入RubyBlocK的item
public class ModItems {
public static final DeferredRegister<Item> ITEMS =DeferredRegister.create(Registries.ITEM, ExampleMod.MODID);
public static void register(IEventBus eventBus){ITEMS.register(eventBus);}
public static final Supplier<Item> RUBY =ITEMS.register("ruby",()->new Item(new Item.Properties()));
public static final Supplier<Item> RUBY_BLOCK = ITEMS.register("ruby_block",()->new BlockItem(ModBlocks.RUBY_BLOCK.get(), new Item.Properties()));
}
创建注册器
在block目录下创建
public class ModBlocks {
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(Registries.BLOCK, ExampleMod.MODID);
public static final Supplier<Block> RUBY_BLOCK = BLOCKS.register("ruby_block", RubyBlock::new);
public static void register(IEventBus eventBus){
BLOCKS.register(eventBus);
}
}
与之前的物品注册器差不多,最后把注册器加入到总线
public ExampleMod(IEventBus modEventBus) {
modEventBus.addListener(this::commonSetup);
NeoForge.EVENT_BUS.register(this);
ModItems.register(modEventBus);
ModBlocks.register(modEventBus);
ModCreativeTab.register(modEventBus);
}
添加材质
resources
├───assets
│ └───examplemod
│ ├───blockstates
│ ├───lang
│ ├───models
│ │ ├───block
│ │ └───item
│ └───textures
│ ├───block
│ └───item
在blockstates下创建ruby_block.json
{
"variants": {
"": {"model": "examplemod:block/ruby_block"}
}
}
在models的block下创建ruby_block.json
{
"parent": "block/cube_all",//方块所有面共用一个材质
"textures": {
"all": "examplemod:block/ruby_block"
}
}
在models的item下创建ruby_block.json
{
"parent": "examplemod:block/ruby_block"
}
在textures中放入材质图片,大小为16×16,格式为png
最后在lang中翻译对应的键,如果搞不清楚键是什么,进一次游戏查看名称即可
添加到创造物品栏
public class ModCreativeTab {
public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS =DeferredRegister.create(Registries.CREATIVE_MODE_TAB, ExampleMod.MODID);
public static final String EXAMPLE_MOD_TAB_STRING = "creative.example_tab";
public static final Supplier<CreativeModeTab> EXAMPLE_TAB =CREATIVE_MODE_TABS.register("example_tab",()->CreativeModeTab.builder()
.withTabsBefore(CreativeModeTabs.COMBAT)
.title(Component.translatable(EXAMPLE_MOD_TAB_STRING))
.icon(()->ModItems.RUBY.get().getDefaultInstance())
.displayItems((parameters,output) -> {
output.accept(ModItems.RUBY.get());
output.accept(ModItems.RUBY_BLOCK.get());//后续物品添加在这下面接着写
})
.build()
);
public static void register(IEventBus eventBus){
CREATIVE_MODE_TABS.register(eventBus);
}
}
Block和Blockstate
| 特性 | Block | BlockState |
|---|---|---|
| 是什么? | 方块类型的定义 | 方块在世界中的具体状态 |
| 是否包含状态数值? | 否 | 有 |
| 是否存储位置信息? | 否 | 通常是和世界中位置关联的 |
| 举例 | 石头、木头、RubyBlock | 朝东的木头、某阶段生长的植物 |
| 代码中代表什么? | 一个类或注册对象 | 一个对象实例,具有属性值 |
一个世界里有很多个方块实体位置,但它们共用一个 Block 说明书;不同位置的方块通过 BlockState 表示自己的状态。
类介绍
BlockBehaviour.Properties类
这是一个用来逐项设置方块行为和性能的“配置容器”。它包含一系列设置方法,让你能控制方块的各种特性,比如硬度、声音、光照、摩擦等。这就像你在给方块做“行为说明书”。
Block类
这是 Minecraft 世界中 所有方块的基础类。它代表一种方块类型的“说明书”,定义了这个方块在世界里的行为和特性。
Block类
这是一个非常特殊的类,它 包含了 Minecraft 所有原版方块的静态引用。 例如:
-
Blocks.STONE→ 代表原版的石头方块 -
Blocks.DIRT→ 代表原版的泥土方块 -
Blocks.DIAMOND_ORE→ 代表原版的钻石矿石方块
















![表情[ciya]-方块工坊](https://crapark.com/wp-content/themes/zibll/img/smilies/ciya.gif)
![表情[se]-方块工坊](https://crapark.com/wp-content/themes/zibll/img/smilies/se.gif)
![表情[jie]-方块工坊](https://crapark.com/wp-content/themes/zibll/img/smilies/jie.gif)
暂无评论内容