--- title: 資料型態 tags: math, started --- # 一、資料數據(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] 命令返回值列表](https://www.mcbbs.net/forum.php?mod=viewthread&tid=808124&extra=page%3D4%26filter%3Dtypeid%26typeid%3D1293) ### 常用的取得數據相關指令範例 - `scoreboard players get @s object` (取得自己於object記分板上的分數) - `data get entity @e[limit=1,tag=location] Pos[0]` (取得一個有location標記者的x座標值) --- ## 2. 數據修改(Modify) ### (1) 存入(Store) 將值(value)存入到指定的位置中 格式:<font color=red>store (to)</font> ... <font color=blue>get (from)</font> 通常用於將型態從 <font color=blue>A</font> 轉換至 <font color=red>B</font> ,或是將資料換個地方存 例如:<font color=blue>NBT</font> ⟶ <font color=red>scoreboard</font> execute as @e[tag=sheep,limit=1] <font color=red>store result score @s hp</font> run <font color=blue>data get entity @s Health</font> --- ### (2) 搬移(Move) 保持整組(compound)或整個資料不變,將其從 <font color=blue>A</font> 轉移至 <font color=red>B</font> 中, 主要是利用data modify的指令,並依照其五個分支決定要如何存入 指令格式:data modify ... <font color=red>(store to)</font> <font color=blue>(get from)</font> --- ### (3) 計算(Operation) 在不搬遷數據的情況下,對同性質的數據直接進行計算與操作(如用scoreboard計算), 或是利用其應變(Dependent)與自變(Independent)的關係來計算出結果, 操作方式並非是直接利用execute store和data指令來實現, 而是利用MC原本的變化機制來實現,這種技巧在後續的文章中會很常用到 以下提共幾組應自變資料: (箭頭的源為<font color=blue>自變數</font>,被指向者為<font color=red>應變數</font>,若為雙向則是彼此皆可互為<font color=salmon>自應變數</font>(可互相影響) ) * <font color=blue>資料標籤(NBT Data)</font> ⟶ <font color=red>實體狀況</font> * 大部分修改NBT Data後,實體都會產生立即變化 * 像是修改Pos, Rotation, Health, ArmorItem...等 * 大部分的應自變化關係皆是以此關係進行擴展 * <font color=blue>座標(Position)</font> ⟷ <font color=blue>角度(Rotation)</font> * 利用指令的facing,以及一些三角函數和幾何的概念 * 詳述於:[三角函數、反三角函數]() 的文章中 * <font color=blue>屬性修飾符(Attribute Modifiers)</font> ⟶ <font color=red>屬性值</font> * 屬性修改(Base、Modifier)的資料會立刻計算其屬性值 * 取出屬性計算結果值的方式可以用attributes get來取得 * 將此功能加強並拓展,可以將其應用到 [小數運算(詳述見此文)]() 一些不常用到的應自變關係: * <font color=blue>最大生命值(maxHealth)</font> ⟶ <font color=red>生命值(Health)</font> * 當Health > maxHealth時,會使Health設置為maxHealth * 但Health最大只能存到1024.0f,即使maxHealth可以大於此值 * 並且Health設定為<=0.0f 時,實體會立刻死亡,無法再偵測到該實體 * 也就是Health只能存 (0, 1024] 之間的值 如果還要舉例的話還有很多,在此只先列出後續會提及的操作方式