NeoForge-1.20.4Mod开发教程之第一个方块

NeoForge-1.20.4Mod开发教程之第一个方块

本篇教程参考为Flandre芙兰NeoForge1.20.4Mod开发的视频,这篇教程是我边学边总结的,与其说是教程更像我的学习笔记,如有不清楚的地方,大家可以在评论区提问。在我力所能及的范围内,我都会解答的。

创建RubyBlock类

位置: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 → 代表原版的钻石矿石方块

这些都是游戏已经注册好了的方块对象,你随时可以引用它们。

© 版权声明
THE END
喜欢就支持一下吧
点赞3 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容