一、資料數據(Data)

1. 資料源(Data Sources)

Minecraft主要有以下幾種東西可以用來儲存資料(data):

  • 記分板(Scoreboard)
  • 標籤資料(NBT Data)
    • 玩家(Player)
    • 實體(Entity)
    • 方塊(Block)
    • 物品(Item)
    • storage
  • 方塊與方塊狀態(Blocks & Block-States)
    • 紅石(Redstone)
    • 農作物(Crops)

其他還有一些不太常用於儲存數據的資料如下:

  • 世界背景資料:
    • 時間與天氣(Time & Weather)
    • 邊界大小(Worldboarder size)
    • 難度(Difficulty)
    • 世界規則(Game rules)

2. 資料型態(Data Types)

共有三種類型,資料型態會以此三種進行拓展:

  • 值 (Value)
  • 陣列 (Array)
  • 組合/複合標籤 (Compound)

資料型態一共會有以下幾種:

中文 英文 後綴 值域
字節/位元組 Byte b 0..7
整數 Int i -2147483648..2147483647
短整數 Short s -32768..32767
長整數 Long l
小數/單精度浮點數 Float f
長小數/雙精度浮點數 Double d
字串 String
布林 Boolean

3. 標籤資料 NBT Data

以下這些東西皆可用於生成標籤資料:

  • data指令
  • 戰利品表(Loot Table)

二、資料操作(Datas' Manipulation)

1. 數據取得(Get):指令回傳

原本在取出任何數據前,都必須通過「指令」來取出數據,
包含像是取出座標、取出生物的NBTdata、取出分數

在MCBBS有人已有統計成一篇詳細解說文章,對於回傳值詳細資料有興趣者可參考文章:
MCBBS - [命令] 【CBL|SPG】[1.14.4] 命令返回值列表

常用的取得數據相關指令範例

  • scoreboard players get @s object (取得自己於object記分板上的分數)
  • data get entity @e[limit=1,tag=location] Pos[0] (取得一個有location標記者的x座標值)

2. 數據修改(Modify)

(1) 存入(Store)

將值(value)存入到指定的位置中

格式:store (to) get (from)
通常用於將型態從 A 轉換至 B ,或是將資料換個地方存

例如:NBTscoreboard
execute as @e[tag=sheep,limit=1] store result score @s hp run data get entity @s Health


(2) 搬移(Move)

保持整組(compound)或整個資料不變,將其從 A 轉移至 B 中,
主要是利用data modify的指令,並依照其五個分支決定要如何存入

指令格式:data modify (store to) (get from)


(3) 計算(Operation)

在不搬遷數據的情況下,對同性質的數據直接進行計算與操作(如用scoreboard計算),
或是利用其應變(Dependent)與自變(Independent)的關係來計算出結果,
操作方式並非是直接利用execute store和data指令來實現,
而是利用MC原本的變化機制來實現,這種技巧在後續的文章中會很常用到

以下提共幾組應自變資料:
(箭頭的源為自變數,被指向者為應變數,若為雙向則是彼此皆可互為自應變數(可互相影響) )

  • 資料標籤(NBT Data)實體狀況
    • 大部分修改NBT Data後,實體都會產生立即變化
    • 像是修改Pos, Rotation, Health, ArmorItem
    • 大部分的應自變化關係皆是以此關係進行擴展
  • 座標(Position)角度(Rotation)
  • 屬性修飾符(Attribute Modifiers)屬性值
    • 屬性修改(Base、Modifier)的資料會立刻計算其屬性值
    • 取出屬性計算結果值的方式可以用attributes get來取得
    • 將此功能加強並拓展,可以將其應用到 小數運算(詳述見此文)

一些不常用到的應自變關係:

  • 最大生命值(maxHealth)生命值(Health)
    • 當Health > maxHealth時,會使Health設置為maxHealth
    • 但Health最大只能存到1024.0f,即使maxHealth可以大於此值
    • 並且Health設定為<=0.0f 時,實體會立刻死亡,無法再偵測到該實體
    • 也就是Health只能存 (0, 1024] 之間的值

如果還要舉例的話還有很多,在此只先列出後續會提及的操作方式