Minecraft地圖裡聊天欄的文字通常是由地圖作者固定好的
不能夠由使用者(玩家)改變
本文嘗試讓使用者能自訂顏色和文字等tellraw才有的功能
概念 (看懂了就不用往下拉了)
- 用 /tellraw 的selector顯示實體的名字
- 將不同實體加入至不同隊伍實現顏色改變
- 用 /entitydata (1.13前) 或 /data (1.13後) 實現文字改變
- 配合/tellraw 的clickEvent製造點擊事件
- 配合function製作動態的互動系統
以下指令為1.12為準
顯示實體名字
首先,你要有一個可以改名字的實體
再來,用tellraw中的selector顯示給玩家
關於tellraw建議用這個產生器比較方便
以下為顯示 @e[tag=text] 的實體的指令:
#生成名為▉的盔甲架 summon armor_stand ~ ~ ~ {CustomName:"▉",Tags:["text"]} #顯示實體名字 tellraw @a {"selector":"@e[tag=text]"} |
改變顏色
1.12.2雖然可以用 § 改實體名字顏色,甚至1.13後能用json表示
但用這些方式改顏色都會動到原本的文字,不能獨立地改顏色
所以我想到這個方法:
建立不同的隊伍並將其分配不同顏色
這樣就能用幫實體改隊伍的方式來改實體的顏色了
以下為更改 @e[tag=text] 實體的隊(一ㄢˊ)伍(ㄙㄜˋ)指令:
#建立一個名為pig的隊伍 scoreboard teams add pig #將隊伍pig的顏色指定為綠色 scoreboard teams option pig color green |
改變文字
在1.12.2用 /entitydata 可以改變實體標籤
而1.13後能用/data 改變 (excute不知道行不行)
以下為更改 @e[tag=text] 實體的文字的指令:
#就這樣而已,我廢話好多 entitydata @e {CustomName:"我的名字被改過"} |
結合clickEvent
我在1.12.2試只有clickEvent能用
hoverEvent會被實體的標籤蓋掉
盼望另有高人解決
以下為顯示 @e[tag=text] 實體的名字並附點擊事件的指令:
#點擊之後,會將實體加入隊伍pig,也就是會變綠色 tellraw @a {"selector":"@e[tag=text]","clickEvent":{"action":"run_command","value":"/scoreboard teams join pig @e[tag=text]"}} |
結合function
如果要讓玩家修改的內容及時反饋
可能就需要結合function比較方便
因為我是用1.12的舊指令寫的
就不方便在此獻醜了
只能講講概念:
建立顏色-建立隊伍並分配各顏色、建立記分板以紀錄顏色狀態
建立實體-建立帶有方便選擇標籤的實體,像是tag,並可預設名字或隊伍為默認文字和顏色
建立視圖-將你要顯示的實體名字用tellraw寫進來,並可增加點擊事件(function或其他指令)
顏色分配-根據記分板的值將實體加入隊伍或改名字(文字),在視圖顯示前執行
視圖更新-想辦法讓視圖在顏色或文字被更改時更新,可定時更新或寫在點擊事件
成果
結語
這個方法如果要大量使用的話會產生很多實體耗效能
如果有更好的方法請多指教(包括指令的部分)
而我一直卡在1.12.2的原因
是因為我有一張地圖需要殭屍或屍殼能看穿牆壁追村民的特性
如果有人知道怎麼解決也拜託跟我說 (超想用1.13後的指令做)