# 实体、方块、物品及显示
在学习命令前,我们需要先明白实体(entity)、方块(block)、物品(Item)以及显示的用处及大致特点。它们就是我们的主要操作目标。
我们不需要严格定义它们,只需要根据它们对我们的用处来分辨它们就好了。
## 实体
能被目标选择器(target selector)中的`@e`选择到的,我们就会当作是实体处理了。
实体**必定**能因受到伤害而死亡,不能免疫*虚空伤害*(掉入虚空时或`kill`命令造成的伤害)。修改血量造成的Bug不在此限。
> 闪电算不算实体?反正我们用不着(无法选择),算不算也没所谓
+ 例子: 玩家、生物、矿车、掉落物等等
+ 特点:
+ 实体和玩家都有一个叫UUID(通用唯一识别码)的"名字",用作识别不同实体。记分板变量、队伍等游戏机制都使用UUID代表实体(玩家名代表玩家)。
如果UUID发生碰撞(出现的几率微乎其微,一般为人手造成的),会导致很严重并且难以靠游戏自行修复的Bug,如无法找到重复UUID的实体等,需要玩家自行使用外部软件修改游戏存档才能解决。
+ 实体都有它们的种类,如"player"、"area_effect_cloud"等。(从1.11之前的版本过来的朋友请注意,1.11把实体名称修改为以下划线`_`分开单词,全部小写。然而也有部分实体名称出现严重更改,如`FallingSand`被改为`falling_block`,请自行查阅wiki)
+ 优点:
+ 能轻易被选择、根据特定条件过滤(这是最重要的)
+ 能储存大量信息(NBT, 记分板变量, Tag, 队伍)
+ 坐标较精确(小数)
+ 能在同一点放置大量实体
+ 坐标限制较少(可以在Y为负数或大于256的地方生成实体,不过还是比较少在Y为负数的地方生成,因为可能会掉入虚空死掉)
+ 缺点
+ 一般实体太多会导致严重卡顿(特别是该实体能被看见时)
> NBT就是一种储存格式,也能代表命令的格式,将在之后的章节详细解释,现在只需要理解为能储存不同类型资料的东西就好了
> 记分板变量(Objective)、Tag及Team将于之后章节详细解释,目前只需要理解为能够
## 方块
+ 特点:
+ 不能与其他方块处于同一个坐标(两块台阶会变为一块双台阶,故不算两个方块占据同一个坐标,其他特殊方块亦如是)
+ 不能横跨多个坐标(活塞推出后,推出的部分为活塞头,分别为两个方块,只是破坏一个会导致另一个同时被破坏)
+ 从y=0到y=255之间(并且在世界边界,即worldborder,之内)都是方块("没有方块"其实就是空气方块)
+ 能够通过资源包修改方块模型(Block model), 来修改方块的样子(实体无法做到)。相应的,模型越复杂就需要越多时间渲染该方块,因此过多复杂模型的方块会导致卡顿。
+ 方块也会对方块更新作出反应,如检查自己能不能在这环境存在、维持原貌等(如沙子在下方没有支撑方块时会掉下)。这方面相信红石玩家会有更多研究,请查阅红石教程,本文就不多讲了。
+ 优缺点: 基本上是上方提到的实体优缺点的相反
+ 资料:
+ ID,指定方块的类型,如`minecraft:stone`
+ 元数据(meta data),范围为0-15,分位储存数据(二进制,比如元数据为a\*8+b\*4+c\*2+d,a b c d分别能储存2种数值。实际可能把两个甚至多个数值并合以储存可能性较多的数值,如3个数值以储存范围从0-5的方向数据,只剩下一个数值储存别的数值),来储存方块的一些额外资料,用法与下方的方块状态类似。
然而由于元数据能储存的数据实在是比较少,Minecraft逐步改为使用方块状态,方块状态将于 1.13 完全取代元数据,因此本文也不会大量提及方块元数据
+ 方块状态(block state),储存方块的一些额外资料,如活塞的朝向`facing=top`、活塞是否已经伸出`extended=false`等。一个方块可以同时有几个方块状态(这也是很常见的情况),之间以`,`间隔,如`facing=top,extended=false`
+ NBT。部分方块,如箱子等容器,需要储存额外的资料(因为方块状态不足以储存大量资料)。它们就是方块实体(block-entity),会使用NBT来储存那额外的资料。
## 物品
+ 存在方式:
+ 掉落物
+ 容器格子内(包括实体储存空间内)
+ 资料:
+ ID,即物品种类,如`minecraft:stone`、`minecraft:stone_sword`。部分方块的物品状态ID与方块ID相同,然而也有部分是不同的,因此得小心分辨。也有部分方块是没有物品的,请小心。
+ 数量(Count),因为相同物品能够堆叠,因此数量是十分重要的。不同物品最大堆叠数也不同,有些是1个,有些是16,有些是64,不能一概而论。
+ 损害值(Damage Value/Data Value),范围为-32,768至32,767,整数。最初用于记录工具的磨损程度(0为全新,损害值+1为耐久度-1),但已经被用于储存别的数值,如羊毛颜色、铁砧耐久等。
然而需要注意的是,即使该物品是方块的物品状态,这损害值的目的也是储存方块的不同状态,损害值也未必与方块数据值一样,如铁砧便是一个好例子。故此,必须区分损害值及方块元数据两个概念。
+ 格子编号(Slot ID)。这个数值用作储存物品所在的格子编号,掉落物状态时物品不存在此数值。
+ 其余数据(Tag)。其实物品所有数据都会放在NBT里,其余数据亦如是,可以储存物品的其他资料,如显示的名称、介绍、附魔等。
+ 用处:
+ 常见游戏内物品的功能,如药水、装备等等
+ 为玩家添加buff (基于附魔或Attribute Modifier)
+ 容器内GUI (界面),因为命令能检测物品所在的格子。
此外,亦能通过修改物品模型(Item model)的显示(display)中的`gui`选项,让物品看起来更像一个控件(control)。
+ 自定义显示。
物品模型能分别对不同损害值的工具设置模型,故此能自定义大量模型。
通过如刷怪笼等方法甚至更能做到大量的自定义方块材质。
> 注意: 不是只有物品才能让生物手持的。末影人手持的是方块。
## 显示
本文说的显示,就是一些只有玩家才能看到、听到,并且无法与游戏内其他东西进行互动的物件。
+ 类型:
+ 聊天栏信息(不算clickEvent的话)
+ Title信息(在屏幕中央的或快捷栏上方)
+ 声音
+ 粒子(particle)
+ 模型
这些显示元素主要在地图及原版模组内会大量使用,以提高用户体验。由于用处十分广泛,本文将不会进行详细讲解,请自行寻找相关教程或询问有丰富地图或原版模组制作经验的玩家。