切換
舊版
前往
大廳
主題

Minecraft 動態改變聊天室文字&顏色

灰塵 | 2020-05-10 21:05:07 | 巴幣 0 | 人氣 478

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後的指令做)

送禮物贊助創作者 !
0
留言

創作回應

更多創作