• 论坛

导航

  • 主页
  • 样式指南
  • 入门
    • 概述
    • Mod的结构
    • Forge更新检查器
    • 依赖管理
    • 调试分析器
  • 概念
    • Sides
    • 资源
    • 注册表
    • Jar签名
    • 国际化和本地化
  • 方块
    • 概述
    • 介绍方块状态
    • 方块互动
      • 玩家右击
      • 玩家破坏
      • 玩家高亮
      • 实体碰撞
      • onBlockClicked
      • onBlockDestroyedByPlayer
  • 动画 API
    • 概述
    • 骨骼
    • 动画状态机
    • 使用API
  • TileEntity
    • 概述
    • 特殊渲染器
  • 物品
    • 主页
    • 战利品表
  • 模型
    • 模型概述
    • 模型文件
    • 方块状态
      • 方块状态JSON概述
      • Forge方块状态JSON
    • 绑定模型到方块和物品
    • 彩色纹理
    • 物品属性概述
    • 高级模型(未翻译)
      • 高级模型介绍
      • IModel
      • IModelState and IModelPart
      • IBakedModel
      • Extended Blockstates
      • Perspective
      • ItemOverrideList
      • ICustomModelLoader
  • 渲染
    • TileEntityItemStackRenderer
  • 事件
    • 基本用法
  • 网络
    • 主页
    • 概述
    • SimpleImpl
    • 实体
  • 数据储存
    • 能力系统
    • World Saved Data
    • 拓展实体属性
    • Config注解
  • 工具
    • 合成
    • 矿物词典
    • 权限API
  • 效果
    • 音效
  • 惯例
    • 版本命名
    • 文件位置
    • 加载阶段
  • 参与Forge开发
    • 入门
    • PR指南

方块互动

玩家可以与方块有很多种互动(Interaction),比如说右击、左击、碰撞、在方块上行走、还有挖掘等。

这一节将会覆盖与方块最常见的互动类型。

玩家右击

由于左击,或者说“击打”,一个方块一般并不会发生什么独特的行为,应该可以说右击,或者“激活”一个方块是最常用的一种互动方式。很幸运,这也是最简单的一种互动方式。

onBlockActivated

这个方法控制了右键的行为,它可能会有点复杂。下面是这个方法的定义:

public boolean onBlockActivated(World worldIn,
                                BlockPos pos,
                                IBlockState state,
                                EntityPlayer playerIn,
                                EnumHand hand,
                                @Nullable ItemStack heldItem,
                                EnumFacing side,
                                float hitX,
                                float hitY,
                                float hitZ)

下面是对这个方法的讨论。

参数

前面几个参数很明显,它们是方块的当前世界,位置,和状态。接下来是激活方块的玩家,以及激活时的左右手。

接下来的一个参数 heldItem 是玩家激活方块时拿着的 ItemStack。注意这个参数为 @Nullable,也就是说这个参数可以为null(即手里没拿东西)。

重要

如果你需要检测玩家手里的物品,请使用方法传进来的这个 ItemStack。检测玩家当前握着的物品是不可靠的,因为它可能在激活方块以后已经变了。

最后四个参数都是相互联系的。side 很明显是方块被激活的面。 hitX,hitY,和 hitZ 可能没这么明显,他们是方块的碰撞箱上激活点的坐标。它们的范围为0-1,代表玩家点击方块上的确切位置。

返回值

返回的那个boolean到底是什么呢?简单来说,它代表了这个方法是否“做了”什么。如果任何执行了任何动作,那就返回true,这将防止之后更多的事情发生,比如说激活物品。

重要

在客户端返回 false 将会防止这个方法在服务端被调用。通常,我们会检查 worldIn.isRemote 并返回 true,否则进入正常的激活逻辑。原版中有很多这样的例子,比如说箱子(Chest)

用处

激活的用处可以说是无穷的。然而我们仍将介绍一些常用的用处。

GUI

方块激活时最常见的用处就是打开一个GUI。许多原版的方块都是这样的,比如说箱子,漏斗,熔炉等。更多的GUI信息可以在这里(未完成)找到。

激活

激活的另一个用处,是激活。这里指的是打开一个开关或者是激活方块执行一个特定的行为。比如说,一个方块可以在激活时发光。原版中可以参考按钮或者拉杆的例子。

重要

onBlockActivated 在客户端和服务端都会被调用,所以一定要记住代码所处的端。许多东西,比如说打开GUI和变动世界,应该只在服务端调用。

玩家破坏

未完成

玩家高亮

未完成

实体碰撞

未完成

onBlockClicked

public void onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn)

当玩家点击一个方块时会被触发。

提示

这个方法是在玩家左击一个方块时调用的。 不要将它和onBlockActivated弄混了,它是当玩家右击一个方块才会激活的。

参数

类型 名称 描述
World worldIn 被点击方块所处的世界
BlockPos pos 被点击方块所处的位置
EntityPlayer playerIn 点击的玩家

使用范例

这个方法可以很方便地在玩家点击一个方块时添加一些自定义的事件。

默认情况下这个方法不会做任何操作。
复写了这一方法的两个方块是音符盒(Note Block)和红石矿石(Redstone Ore)。

音符盒会在左击的时候播放一个音效。红石矿石方块会在左击的时候发光几秒钟。

onBlockDestroyedByPlayer

public void onBlockDestroyedByPlayer(World worldIn, BlockPos pos, IBlockState state)

当玩家摧毁一个方块时会被触发。

参数:

类型 名称 描述
World worldIn 被摧毁的方块所在的世界
BlockPos pos 被摧毁方块的坐标
IBlockState state 被摧毁的方块的状态

警告

参数pos可能不保持指示的状态

使用范例

此方法非常适合添加自定义方块破坏事件。

该方法默认为空。

TNT 方块为了在摧毁时引发爆炸重写了该方法。
激活的活塞使用该方法因为激活的活塞由两部分(头部和基部)组成, 当移动的活塞块被破坏时,它利用这个方法来破坏基部。

基于 MkDocs 使用自定义主题构建. 托管于 Read the Docs.
启用夜间模式