來源:我的世界中文論壇
作者:PotatoMaster101
在14w27a中出來了一個新的dataTag:{CommandStats}。這個dataTag是控制積分板用的,適合做冒險地圖什麼。這個功能比較強大。目前有4個功能:Block,Item,Entity和Success。這個的用處是,可以探測玩家背包裡有多少個某個物品,探測地圖裡有多少個生物等等。
Blocks – 控制方塊
指令方塊放置了幾個方塊,那就會把積分變到幾分。比如:如果是/setblock,那就是1,因為/setblock只能放一個方塊。如果是/fill,那就可以很多了,看玩家/fill多少個方塊,然後就顯示多少。
Items – 控制物品
用這個可以探測玩家身上帶了幾個指定的物品。這個和/clear結合,把玩家的某個物品刪除0個,然後Item就會顯示出玩家物品的數量。
Entities – 探測生物
比如:使用/tp @e ~ ~ ~,可以把所有生物TP到他們當前的位置,然後Entity就會顯示出有多少個輸出,也就是多少個生物。
Success – 控制執行的次數
比如如果是Item的話,/clear之後就會探測有多少個物品,但是Success還是1,因為就執行了一次。
Query – 遊戲晚點再加入的,控制其他一些東西的次數
比如:/time,來告訴玩家時間是多少,或者/xp,來告訴玩家自己有多少XP等等。這個就不發教程了,詳情請看Tyson的教程。
之後來說下NBT的格式。格式:
{CommandStats:{AffectedItemsName:”Items玩家”,AffectedItemsObjective:”積分板變數”,
AffectedBlocksName:”Blocks玩家”, AffectedBlocksObjective:”積分板變數”,
AffectedEntitiesName:”Entities玩家”, AffectedEntitiesObjective:”積分板變數”,
SuccessCountName:”Success玩家”,SuccessCountObjective:”積分版變數”}}
大家看見。NBT的格式裡面有4個剛才說的東西:Blocks,Items,Entities和Success。本人推薦把積分板變數都改成相同的變數,這樣比較方便。Blocks玩家,Entities玩家什麼,都是積分板裡面的玩家系統。但是本人推薦使用假名。(官方格式來自Wiki)
之後來教大家如何使用這個NBT。首先要做很多準備工作,比如創建積分板變數,創建假名什麼。
首先創建一個積分板變數。指令方塊裡輸入:
/scoreboard objectives add (變數名字) dummy
變數名字地方隨便填寫。本人這裡就使用“14w27b”這個名字。
之後,創建假名。這裡也是和剛才一樣。指令方塊裡分別輸入:
/scoreboard players set (假名) (變數名字) 0
這裡需要4個假名,因為有4個選項。所以,放置4個指令方塊,然後分辨打入4個不同的假名。本人的假名就使用Blocks,Items,Entities和Success。(注意,變數名字要和剛才創建的相同)
之後,設置積分板的顯示。這個很簡單,使用setdisplay:
/scoreboard objectives setdisplay sidebar (變數名字)
這條指令把積分板變數顯示在遊戲畫面右邊。輸入完這條指令後不會出現東西,因為還未加入積分。所以,我們要把假名的積分全部設置成0(預設)。
現在把積分板變數裡的4個假名分數都變成0。指令就是:
/scoreboard players set (假名) (積分板變數) 0
有4個假名,所以就要把4假名都設置成0。一個一個的設置。
最終效果就是在畫面右邊顯示積分板。截圖:
之後來控制顯示使用的指令方塊。地上放一個指令方塊,然後裡面輸入:
/blockdata ~ ~ ~
{CommandStats:{AffectedItemsName:”Items玩家”,AffectedItemsObjective:”積分板變數”,
AffectedBlocksName:”Blocks玩家”, AffectedBlocksObjective:”積分板變數”,
AffectedEntitiesName:”Entities玩家”, AffectedEntitiesObjective:”積分板變數”,
SuccessCountName:”Success玩家”,SuccessCountObjective:”積分版變數”}}
大家看見,這個格式就和剛才一樣。這裡使用/blockdata給指令方塊注入積分板的資訊。這裡有4個玩家:Blocks, Entities, Success和Items。這4個玩家就分別使用剛才創建的4個假名。然後積分板變數就和剛才創建的相同。
比如像我這裡,就是:
/blockdata ~ ~ ~
{CommandStats:{AffectedItemsName:”Items”,AffectedItemsObjective:”14w27b”,
AffectedBlocksName:”Blocks”, AffectedBlocksObjective:”14w27b”,
AffectedEntitiesName:”Entities”, AffectedEntitiesObjective:”14w27b”,
SuccessCountName:”Success”,SuccessCountObjective:”14w27b”}}
假名不同,變數一樣。
(當然,/setblock也可以使用。)
之後執行就可以了。然後指令方塊會自己注入所有的資訊。注意:只有注入的指令方塊才可以執行。所以注入完畢後別打掉指令方塊,否則要重新注入。
注入完畢後清空掉指令方塊裡的指令,然後就可以隨便的打了。比如:/fill ~ ~1 ~ ~ ~3 ~ minecraft:stone 0 replace ,那麼指令方塊就會把上面3格換成石頭。然後看積分板,控制Blocks的假名就會實現,把0分換成3分,因為換了3個方塊。然後Success處也會+1分,因為執行了一次就成功。
截圖:
之後,控制Entities,Items都一樣。Entities的話,那麼就可以使用 /tp @e ~ ~ ~ ,把所有的生物移到他們當前位置(也就是沒有移動),然後Entities就會顯示所有移動的生物數量:
之後的Items就不多說了。使用/clear或者/give什麼,可以增加Items假名的積分。
之後,如果要輸出的話本人就不多說了,過於簡單。可以用/testfor,execute或者/scoreboard players test。
最後,要清空積分板的話那就把4個假名的分數都變成0。
之後,教大家使用/stats。這個/stats,也是新出的指令,配合{CommandStats}。首先,指令格式是:
/stats <entity> <對象> <格式> <stat> <積分板假名> <積分板變數>
這個是使用在生物上面的。之後,還有一個使用在指令方塊上面的:
/stats block <指令方塊XYZ> <格式> <stat> <積分板假名> <積分板變數>
這些指令我就不多說了,和上面的一樣。主要是把NBT換成了指令而已。
最後推斷:
所謂的變數名字、假名我以前搗鼓計分板時實際上是把它們作為記錄體格式的變數來統計的。這裡計分板我看就是個指示統計輸出的作用。
按說計分板資料的輸出是一個比較糾結的問題,通過命令方塊本身NBT存儲這些資料,最好能作為指令裡的參數發揮作用,這樣可以類似於程式設計裡i++等的作用,簡單迴圈比如造伸展造橋的效果什麼的可以用較少的指令方塊來完成。