【攻略】Summon指令的Json教學

原本是我的友人在問指令怎麼用,就教一點,然後再問,再教一點,最後時不時要我調試,我就乾脆發成文給他看。反正要發文了,就乾脆發在版上分享,如版上已有類似的文章就抱歉了。
我相信很多人都會這樣:裡面的英文,明明都看得懂,但照著打出來,放在指令方塊上就是紅字(BUG),然後調試常常就是打錯字,少逗號,括弧放錯…。
首先,本文不是教你怎麼用指令,而是教Json(聲明對象),如果只是要知道指令用法,請到官方WIKI查文檔。然後要告訴你的是:
Json
不是程序!
不是程序!
不是程序!
所以不要怕學程序,因為這篇壓根兒就沒有…

先來看Summon這個指令:
/summon minecraft:villager ~ ~ ~ {VillagerData:{type:desert,profession:farmer,level:2},CustomName:'”Steve”‘}
其中的「~ ~ ~」指的是座標的「x、y、z」,「~」的意思是當前座標。
這裡恐怕已經有人覺得指令很長了,所以本人開宗明義要先跟各位講,不要怕,長的部份只是Json。如果把Json的部份去掉,就會長成這樣:
/summon minecraft:villager ~ ~ ~
你必需要知道的是,去掉Json的這一段,才是系統真正的指令。
這是Json的基本格式:{name:steve}
Json(JavaScript Object Notation),中文叫做「JavaScript的對象格式」,是用來聲明JavaScript對象用的,白話文:告訴電腦這個東西長什麼樣子、叫什麼名字、有多長有多短……等等。
至於對象是什麼,程序中有個概念叫「面向對象」,也就是把程序當作對象來設計,這裡不提,你只需要知道:「對象 = 物品 = 東西 = 項目」。村民是一個對象、終界龍也是一個對象、泥土是對象、腐肉是對象、蘋果、骨頭、木棒…都是對象。
所以Json只是一種數據呈現方式,就跟「.txt」文檔一樣,Json的文檔叫做「.json」。如果把文本寫成段落,每段空兩格,依照起承轉合的方式寫文,這種格式叫做作文;寫成七個字,分四段,有押韻,這種格式叫做七言絕句。同理,文本寫成{key:value}的格式,就叫做Json。
Json那個大括弧可不可以去掉?……不可以!
以純文本表示一個村民:
這個村民叫Steve、類型沙漠、職業農夫、等級學徒。
上述的村民以Json規範表示:
{VillagerData:{type:desert,profession:farmer,level:2},CustomName:'”Steve”‘}
你必需要知道的是,沒有老師能教整堂課的Json,因為Json根本講不了什麼東西…
key是鍵、或稱屬性,屬性不能改,屬性是固定的,屬性由開發者決定,當然屬性名稱也是,這個屬性如果叫做「name」,那麼你就不能打「Name」,因為他們是不同東西。其實一開始聲明對象最花時間的地方就在找屬性,因為不知道官方設了哪些屬性,名稱是什麼,所以只能蒙打瞎猜。要想知道對象屬性,得去官方查文檔。
value是數值、或稱變數。變數聽起來很程序,那是因為你沒聽過,變數的反義詞叫做「常數」,常數永遠不會變。然後我們來學一下數學:「x + y = 3」,x 是多少?這下懂了嗎!因為 x 不固定,所以他才叫變數。數學公式,就是由一堆變數組成的。
你必需要知道的是,程序也是由變數組成,寫程序如同寫公式,但本文沒有
既然屬性不能改,那麼能動的只剩value。值:可以有數值、字元串、布爾、數組以及對象。
說明一下符號,跟作文一樣,作文有標點符號,Json也有,但Json比較少:
大括弧({}):用來表示對象
中括弧([]):用來表示數組
冒號(:)用來指定給值
逗號(,):分隔符號
單引號():用來表示字元串(純文本)
雙引號():用來表示屬性
反斜線(\):跳脫字元符號
身為程序員,都應該用使用標準寫法,而標準寫法的Json格式應該長這樣,有一堆雙引號:
數值(Json格式):{“name”:123}
字元串(Json格式):{“name”:’123′}
布爾(Json格式):{“name”:true}
數組(Json格式):{“name”:[1,2,3,4,5]}
對象(Json格式):{“name”:{“name2”:123}}
身為一個玩家,Json格式可以長這樣,這樣更短更好讀,也更好調試:
數值(Json格式):{name:123}
字元串(Json格式):{name:'”123″‘}
布爾(Json格式):{name:true}
數組(Json格式):{nume:[1,2,3,4,5]}
對象(Json格式):{nume:{name2:123}}
你必需要知道的是,這兩種格式都是對的,因為Json原本就允許這麼寫。
跳脫字元是什麼?
假設我有一個字元串「123\456\789」。
套用Json格式:{name:'”123\456\789″‘}
不能運行,因為Json把他當成路𠇹了!
Json是白痴,你要告訴他「\」是文本。那要怎麼做呢?請再加上一個「\」跳脫字元。
正確格式:{name:'”123\\456\\789“‘}
來看一下剛才聲明的屬性:{CustomName:'”Steve”‘}
「”」用來表示屬性,注意雙引號的外面還有一層單引號。
Json是白痴,你要告訴他「”」是文本,所以這段的外面加了單引號,告訴Json這是純文本。
同樣的寫法,也可以用跳脫字元表示:{CustomName:”\”Steve\””}
兩段是一樣意思。這裡看不懂,請跳過,因為不重要!
注意了!對象中可以放對象,如同一個箱子。既然箱子可以放東西,那箱子中再放一個箱子也可以吧,沒道理箱子只能放東西啊!
介紹一下布爾(Boolean):為什麼叫這名字?因為發明他的人叫「Boole」。那這是用來干麻的呢?用來表示真與假,所以他只有兩個值「True、False」。布爾也可以用數字表示:「1、0」。再來說比較特別的--數組,數組才是造成指令超超超級長的主因。
你必需要知道的是,數值與字元串不同:
數值處理數字,是數字相加:「1 + 2 = 3」
字元串處理數字,是文本相連:「1 + 2 = 12」
Json是聲明對象的格式,對象中可以放對象,數組裡面又有多個值,而這些值也可以是對象,所以就會變成:對象包很多個數組,然後數組放更多的對象,你包我、我包你……然後整段指令你就看不懂了。
不懂沒關係,看實例:
生成村民,名字Steve、類型沙漠、職業農夫、等級學徒。以40個綠寶石販售鑽石劍,附魔:鋒利5、橫掃之刃3、擊退2,每日交易上限3次;以30個綠寶石販售弓,附魔:強力5、衝擊2,每日交易上限3次。
/summon minecraft:villager ~ ~ ~ {VillagerData:{type:desert,profession:farmer,level:2},CustomName:'”Steve”‘,Offers:{Recipes:[{maxUses:3,buy:{id:emerald,Count:40},sell:{id:diamond_sword,Count:1,tag:{Enchantments:[{id:sharpness,lvl:5},{id:sweeping,lvl:3},{id:knockback,lvl:2}]}}},{maxUses:3,buy:{id:emerald,Count:30},sell:{id:bow,Count:1,tag:{Enchantments:[{id:power,lvl:5},{id:punch,lvl:2}]}}}]}}
指令很長,我知道,故意的。
把指令的地方挑掉,只留Json:
{VillagerData:{type:desert,profession:farmer,level:2},CustomName:'”Steve”‘,Offers:{Recipes:[{maxUses:3,buy:{id:emerald,Count:40},sell:{id:diamond_sword,Count:1,tag:{Enchantments:[{id:sharpness,lvl:5},{id:sweeping,lvl:3},{id:knockback,lvl:2}]}}},{maxUses:3,buy:{id:emerald,Count:30},sell:{id:bow,Count:1,tag:{Enchantments:[{id:power,lvl:5},{id:punch,lvl:2}]}}}]}}
看不懂,沒關係,我也看不懂,因為沒排版。來排版一下:
{
    VillagerData:{
        type:desert,
        profession:farmer,
        level:2
    },
    CustomName:'”Steve”‘,
    Offers:{
        Recipes:[
            {
                maxUses:3,
                buy:{id:emerald,Count:40},
                sell:{
                    id:diamond_sword,
                    Count:1,
                    tag:{
                        Enchantments:[
                            {id:sharpness,lvl:5},
                            {id:sweeping,lvl:3},
                            {id:knockback,lvl:2}
                        ]
                    }
                }
            },
            {
                maxUses:3,
                buy:{id:emerald,Count:30},
                sell:{
                    id:bow,
                    Count:1,
                    tag:{
                        Enchantments:[
                            {id:power,lvl:5},
                            {id:punch,lvl:2}
                        ]
                    }
                }
            }
        ]
    }
}
我們一段一段處理。把對象展開,像數學公式一樣…
對象是節點的概念,可以用二分法來表示。二分法、或稱二叉樹、或稱二元樹。要叫生命樹也行(雖然沒人這麼叫),不過這顆樹只有樹根,只能往下長。
根節點:
第二層節點:
第三層節點:
樹根第四、五層節點:
左樹根第六、七層節點:
右樹根第四、五、六、七層節點:
那麼怎麼寫成Json呢?每個節點都是一個對象,必需寫成{key:value}才符合規範,然後你發現上面的樹根,啊啦不可思議,每個節點剛好都符合規範呢。那麼可以動手了!拼圖拼過吧,接起來就是了,怎麼接,用「,」一個一個拼回去。然後你會發現,Json你學完了!
你必需要知道的是,程序員通常也用二分法的方式處理Json,因為更容易調試。任何一個節點都能夠單獨處理,也就是說:可以將一個超大型對象,分給10個人寫,最後將Json拼在一起而不出錯。
你必需要知道的是,Json只是文本檔,沒有任何功能,可以用記事本寫,寫完存成「.json」,他就是Json檔。

你必需要知道的是,Minecraft文件中存在很多Json檔,你可以發現很多秘密。設計師常常把東西藏在Json中,你要做的,就只是把他調用出來。

你必需要知道的是,Minecraft指令其實有生成器可以用,他會自動幫你打好指令…好吧,我應該是要放在開頭的,但是我忘了…

本文來自網路,不代表3樓貓立場,轉載請註明出處:https://www.3loumao.org/19700.html?variant=zh-tw
返回頂部