# 實體、方塊、物品及顯示
在學習命令前,我們需要先明白實體(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)
+ 模型
這些顯示元素主要在地圖及原版模組內會大量使用,以提高用戶體驗。由于用處十分廣泛,本文將不會進行詳細講解,請自行尋找相關教程或詢問有豐富地圖或原版模組制作經驗的玩家。