• Forge论坛

导航页

  • 主页
  • 向文档做出贡献
  • 入门
    • 概述
    • 模组文件
    • 规划你的模组结构
    • 版本号
  • 核心概念
    • 注册表
    • 端位(Sides)
    • 事件
    • 模组生命周期
    • 资源
    • 国际化与本地化
  • 方块
    • 概述
      • 创建一个方块
      • 注册一个方块
      • 延伸阅读
    • 方块状态
  • 物品
    • 概述
    • BlockEntityWithoutLevelRenderer
  • 网络
    • 概述
    • SimpleImpl
    • 实体的同步
  • 方块实体
    • 概述
    • BlockEntityRenderer
  • 游戏特效
    • 粒子效果
    • 音效
  • 数据储存
    • Capabilities
    • Saved Data
    • 编解码器(Codecs)
  • 图形用户界面
    • 菜单(Menus)
    • 屏幕(Screens)
  • 渲染
    • 模型扩展
      • 概述
      • 根变换
      • 渲染类型
      • 部分可见度
      • 面数据
    • 模型加载器
      • 概述
      • 烘焙模型
      • 变换
      • 物品重载
  • 资源
    • 客户端资源(Assets)
      • 概述
      • 模型
        • 概述
        • 纹理色调
        • 物品属性
    • 服务端数据(Data)
      • 概述
      • 配方
        • 概述
        • 自定义配方
        • 原料
        • 非数据包配方
      • 战利品表
      • 全局战利品修改器
      • 标签
      • 进度
      • 条件性加载数据
  • 数据生成
    • 概述
    • 客户端资源(Assets)
      • 模型提供者
      • 语言提供者
      • 音效提供者
    • 服务端数据(Data)
      • 配方提供者
      • 战利品表提供者
      • 标签提供者
      • 进度提供者
      • 全局战利品修改器提供者
      • 数据包注册表对象提供者
  • 杂项功能
    • 配置
    • 键盘布局
    • 游戏测试
    • Forge更新检查器
    • 调试分析器
  • 进阶主题
    • 访问转换器
  • 向Forge做出贡献
    • 概述
    • Pull Request准则
  • 旧版本
    • 概述
    • 移植到当前版本

方块

显然,方块是Minecraft世界的关键。它们构成了所有的地形、结构和机器。如果你有兴趣制作一个模组,那么你必然可能会想添加一些方块。本页将指导你创建方块,以及你可以使用它们做的一些事情。

创建一个方块

基础方块

对于不需要特殊功能的简单方块(比如圆石、木板等),不必自定义一个类。你可以通过使用BlockBehaviour$Properties对象实例化Block类来创建一个方块。该BlockBehaviour$Properties对象可以调用BlockBehaviour$Properties#of创建,并且可以通过调用其方法进行自定义。例如:

  • strength - 硬度控制着断块所需的时间。它是一个任意值。作为参考,石头的硬度为1.5,泥土的硬度为0.5。如果该方块不能被破坏,则应使用-1.0的硬度,Blocks#BEDROCK的定义是一个例子。抗性控制块的防爆性。作为参考,石头的抗性为6.0,泥土的抗性为0.5。
  • sound - 控制方块在点击、破坏或放置时发出的音效。其需要一个SoundType参数,请参阅音效页面了解更多详细信息。
  • lightLevel - 控制方块的亮度。其接受一个带有BlockState参数的函数,该函数返回从0到15的某一个值。
  • friction - 控制方块的动摩擦系数。作为参考,冰的动摩擦系数为0.98。

所有这些方法都是可链接的,这意味着你可以串联地调用它们。有关此方面的示例,请参见Blocks类。

注意

CreativeModeTab未针对方块定义setter。如果方块有与之关联的物品(例如BlockItem),则由BuildCreativeModeTabContentsEvent处理。此外,也没有针对翻译键的setter,因为它是通过Block#getDescriptionId从注册表名称生成的。

进阶方块

当然,上面只允许创建非常基本的方块。如果你想添加一些功能,比如玩家交互,那么需要一个自定义的方块类。然而,Block类有很多方法,并且不幸的是,并不是每一个方法都能在这里用文档完全表述。请参阅本节中的其余页面,以了解你可以对方块进行的操作。

注册一个方块

方块必须经过注册后才能发挥作用。

重要

存档中的方块和物品栏中的“方块”是非常不同的东西。存档中的方块由BlockState表示,其行为由一个Block类的实例定义。同时,物品栏中的物品是由Item控制的ItemStack。作为Block和Item二者之间的桥梁,有一个BlockItem类。BlockItem是Item的一个子类,它有一个字段block,其中包含对它所代表的Block的引用。BlockItem将“方块”的一些行为定义为物品,例如右键单击如何放置方块。存在一个没有其BlockItem的Block也是可能的。(例如minecraft:water是一个方块,但不是一个物品。因此,不可能将其作为一个物品保存在物品栏中。)

当一个方块被注册时,也仅仅意味着一个方块被注册了。该方块不会自动具有BlockItem。要为块创建基本的BlockItem,应该将BlockItem的注册表名称设置为其Block的注册表名称。BlockItem的自定义子类也可以使用。一旦为方块注册了BlockItem,就可以使用Block#asItem来获取它。如果该方块没有BlockItem,Block#asItem将返回Items#AIR,因此,如果你不确定你正在使用的方块是否有BlockItem,请检查其Block#asItem是否返回Items#AIR。

选择性地注册方块

在过去,有一些模组允许用户在配置文件中禁用方块/物品。但是,你不应该这样做。允许注册的方块数量没有限制,所以请在你的模组中注册所有方块!如果你想通过配置文件禁用一个方块,你应该禁用其配方。如果要禁用创造模式物品栏中的方块,请在BuildCreativeModeTabContentsEvent中构建内容时使用FeatureFlag。

延伸阅读

有关方块属性的信息,例如用于栅栏、墙等原版方块的属性,请参见方块状态部分。

Built with MkDocs using a custom theme. Hosted by Read the Docs.
Enable Dark Theme