我的世界命令方塊教程漢字輸入法講解
首先呢,我先要說一下,為什么在玩家可以直接輸入文本的游戲里加入這樣一個輸入法呢?因為游戲目前并不能獲取玩家輸入的文本,而一旦可以輸入,我們就可以處理這樣的一個文本。一旦處理這個文本,我們又能加很多特技了,這個輸入法的原型,出自我快一年前的掃雷的英雄榜。
總共創(chuàng)立的計分板只有一個。我寫的名稱為end。
這個計分板承接各種功能,我會在模塊介紹中提到具體用法。
那么廢話不多說,我們開始吧。
首先附上效果圖。
這是整個電路的鳥瞰截圖。
這些模塊環(huán)環(huán)相扣,先從原理說起吧。
原理
Tellraw可以通過選擇器事件來顯示和say一樣的效果,那么我們可以通過只選擇一個實體的方法來實現(xiàn)在tellraw中自定義文本。這一點我在很久之前的帖子里屢次提到或用到。而點擊事件也可以用于制作軟鍵盤。綜合兩點可以做出不錯的效果。
原理完!
下面分模塊進行講解。
軟鍵盤-防溢出模塊
下面是一個指令樣本。
tellraw @a [{"text":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","color":"green"},{"selector":"@e[-8,4,1,r=0,name=!print]"},{"selector":"@e[-8,4,2,r=0,name=!print]"},{"selector":"@e[-8,4,3,r=0,name=!print]"},{"selector":"@e[-8,4,4,r=0,name=!print]"},{"selector":"@e[-8,4,5,r=0,name=!print]"},{"selector":"@e[-8,4,6,r=0,name=!print]"},{"selector":"@e[-8,4,7,r=0,name=!print]"},{"selector":"@e[-8,4,8,r=0,name=!print]"},{"selector":"@e[-8,4,9,r=0,name=!print]"},{"selector":"@e[-8,4,10,r=0,name=!print]"},{"text":"\n"},{"text":"【←】","color":"green","clickEvent":{"action":"run_command","value":"/tp @e[0,4,-1000,dz=2000,dx=0,dy=0,type=ArmorStand] ~ ~ ~10 "}},{"text":" "},{"selector":"@e[0,4,1,r=0]","clickEvent":{"action":"run_command","value":"/setblock -7 4 -4 minecraft:redstone_block"}},{"text":" "},{"selector":"@e[0,4,2,r=0]","clickEvent":{"action":"run_command","value":"/setblock -8 4 -4 minecraft:redstone_block"}},{"text":" "},{"selector":"@e[0,4,3,r=0]","clickEvent":{"action":"run_command","value":"/setblock -9 4 -4 minecraft:redstone_block"}},{"text":" "},{"selector":"@e[0,4,4,r=0]","clickEvent":{"action":"run_command","value":"/setblock -10 4 -4 minecraft:redstone_block"}},{"text":" "},{"selector":"@e[0,4,5,r=0]","clickEvent":{"action":"run_command","value":"/setblock -11 4 -4 minecraft:redstone_block"}},{"text":" "},{"selector":"@e[0,4,6,r=0]","clickEvent":{"action":"run_command","value":"/setblock -12 4 -4 minecraft:redstone_block"}},{"text":" "},{"selector":"@e[0,4,7,r=0]","clickEvent":{"action":"run_command","value":"/setblock -13 4 -4 minecraft:redstone_block"}},{"text":" "},{"selector":"@e[0,4,8,r=0]","clickEvent":{"action":"run_command","value":"/setblock -14 4 -4 minecraft:redstone_block"}},{"text":" "},{"selector":"@e[0,4,9,r=0]","clickEvent":{"action":"run_command","value":"/setblock -15 4 -4 minecraft:redstone_block"}},{"text":" "},{"selector":"@e[0,4,10,r=0]","clickEvent":{"action":"run_command","value":"/setblock -16 4 -4 minecraft:redstone_block"}},{"text":"【→】\n","color":"green","clickEvent":{"action":"run_command","value":"/tp @e[0,4,-1000,dz=2000,dx=0,dy=0,type=ArmorStand] ~ ~ ~-10 "}},{"text":"\n"},{"selector":"@e[-10,4,1,r=0,name=!check]"},{"selector":"@e[-10,4,2,r=0,name=!check]"},{"selector":"@e[-10,4,3,r=0,name=!check]"},{"selector":"@e[-10,4,4,r=0,name=!check]"},{"selector":"@e[-10,4,5,r=0,name=!check]"},{"selector":"@e[-10,4,6,r=0,name=!check]"},{"text":"\n","clickEvent":{"action":"run_command","value":"say hi"}},{"text":" [ Q ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 16 minecraft:redstone_block"}},{"text":"[ W ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 22 minecraft:redstone_block"}},{"text":"[ E ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 4 minecraft:redstone_block"}},{"text":"[ R ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 17 minecraft:redstone_block"}},{"text":"[ T ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 19 minecraft:redstone_block"}},{"text":"[ Y ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 24 minecraft:redstone_block"}},{"text":"[ U ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 20 minecraft:redstone_block"}},{"text":"[ I ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 8 minecraft:redstone_block"}},{"text":"[ O ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 14 minecraft:redstone_block"}},{"text":"[ P ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 15 minecraft:redstone_block"}},{"text":" │ ENTER │\n","clickEvent":{"action":"run_command","value":"say hi"}},{"text":" [ A ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 0 minecraft:redstone_block"}},{"text":"[ S ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 18 minecraft:redstone_block"}},{"text":"[ D ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 3 minecraft:redstone_block"}},{"text":"[ F ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 5 minecraft:redstone_block"}},{"text":"[ G ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 6 minecraft:redstone_block"}},{"text":"[ H ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 7 minecraft:redstone_block"}},{"text":"[ J ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 9 minecraft:redstone_block"}},{"text":"[ K ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 10 minecraft:redstone_block"}},{"text":"[ L ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 11 minecraft:redstone_block"}},{"text":" ","clickEvent":{"action":"run_command","value":"say hi"}},{"text":"│ 刪除文字│\n","clickEvent":{"action":"run_command","value":"/setblock -15 5 -2 minecraft:redstone_block"}},{"text":" [ Z ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 25 minecraft:redstone_block"}},{"text":"[ X ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 23 minecraft:redstone_block"}},{"text":"[ C ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 2 minecraft:redstone_block"}},{"text":"[ V ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 21 minecraft:redstone_block"}},{"text":"[ B ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 1 minecraft:redstone_block"}},{"text":"[ N ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 13 minecraft:redstone_block"}},{"text":"[ M ]","clickEvent":{"action":"run_command","value":"/setblock -15 4 12 minecraft:redstone_block"}},{"text":" "},{"text":" │ 刪除拼音 │","clickEvent":{"action":"run_command","value":"/setblock -15 4 -2 minecraft:redstone_block"}}]
復制代碼
其效果如上方動圖所示。
所有點擊事件均為放置紅石塊,由于這個系統(tǒng)并未實裝,所以enter那里并未實裝命令。
其原理為
讀取字庫召喚出來的同音字紙條,紙條上每個盔甲架都代表著一個字,模塊的讀取長度為10個字。那么我們就應該要注意一點,字在多于十個的時候我們要提供翻頁功能。但是我們不能翻的太過頭,否則模塊讀取不到字。
那么我們就需要探測這個紙條是否已經(jīng)到了頭,那么我們就要對超出的部分進行探測,一旦沒有超出的部分,那就代表著已經(jīng)翻到了頭,這時候就需要消除掉那處的點擊事件,也就是換一條指令。(雖然別的辦法也行,不過這樣最簡單粗暴)
/scoreboard players set l end 0
/testfor @e[0,4,0,dz=-100]
/scoreboard players set l end 1 (con模式)
復制代碼
這是一組探測是否能夠向左翻的指令,向右的指令結(jié)構(gòu)相同。
/scoreboard players test r end 1 1
/scoreboard players test l end 1 1 (con模式)
/tellraw (con模式)
復制代碼
這里是一個探測的例子,用于探測指令狀態(tài)。
由于左邊和右邊各有兩種可能,所以總共需要四條序列。不同的tellraw有著不同的翻頁狀態(tài)。
緩存模塊
也就是中間那兩行目標所在的位置,這個位置呢是非常有趣的。白樺木木板那一行所存儲的是拼音,因為拼音最多的可能性為6個字母,所以這里也就有六個位置。橡木木板那一行所存儲的是打出的字,作為一個中繼緩存。按下enter可以將打好的字轉(zhuǎn)移到指定的位置。
每行有一個屬于自己的指針。拼音那一行由于需要讀取數(shù)據(jù)所以有一排盔甲架。圖中的命令方塊僅為召喚盔甲架使用,不影響運行。
summon ArmorStand ~ ~ ~ {CustomName:"set",NoGravity:1,Marker:1}
復制代碼
這是一個樣例的指令。
讀取拼音內(nèi)容的盔甲架名為set
拼音行指針名為check
文字行指針名為print
按鍵錄入模塊
首先上方有一排高頻,用于讀取拼音行的內(nèi)容。
/scoreboard players set @e[name=set] end 0
/execute @e[name=a] ~-1 ~ ~ /scoreboard players set @e[r=0,name=set] end 1
/execute @e[name=b] ~-1 ~ ~ /scoreboard players set @e[r=0,name=set] end 2
…
/execute @e[name=y] ~-1 ~ ~ /scoreboard players set @e[r=0,name=set] end 25
/execute @e[name=z] ~-1 ~ ~ /scoreboard players set @e[r=0,name=set] end 26
復制代碼
A-Z對應數(shù)字1-26,空格對應數(shù)字0。
然后接下來是26排命令方塊,對應各個字母,執(zhí)行一次輸入字母的工作。
以字母A為例。
/setblock ~1 ~ ~ air
/execute @e[name=check] ~ ~ ~ kill @e[r=0,name=!check]
/execute @e[name=check] ~ ~ ~ summon ArmorStand ~ ~ ~ {CustomName:"a",NoGravity:1,Marker:1}
/execute @e[name=check] ~ ~ ~ detect ~ ~-1 ~1 planks -1 /tp @e[name=check] ~ ~ ~1
復制代碼
清理一次本格內(nèi)容以防bug。然后寫下“A”,最后向右移動一次指針。
刪除模塊
和邊上的錄入模塊工作原理很類似。
同樣的,有刪除拼音和刪除文字兩排指令。
/setblock ~1 ~ ~ air
/execute @e[name=print] ~ ~ ~ detect ~ ~-1 ~-1 planks -1 /tp @e[name=print] ~ ~ ~-1
/execute @e[name=print] ~ ~ ~ kill @e[r=0,name=!print]
kill @e[0,4,-1000,dz=2000,dx=0,dy=0,type=ArmorStand]
復制代碼
最后的kill指令是為了刷新候選字。
候選字模塊
如圖所示,我們有十個候選字。
每個候選字的處理方式如下
/setblock ~ ~ ~1 air
/execute @e[name=print] ~ ~ ~ kill @e[r=0,name=!print]
/tp @e[0,4,1,r=0] @e[name=print]
kill @e[0,4,-1000,dz=2000,dx=0,dy=0,type=ArmorStand]
/execute @e[name=print] ~ ~ ~ detect ~ ~-1 ~1 planks -1 /tp @e[name=print] ~ ~ ~1
/kill @e[-10,4,0,dz=10,name=!check]
/tp @e[name=check] ~ ~ 1
復制代碼
差不多意思就是漢字指針清除本格內(nèi)容防止bug,將現(xiàn)有的候選字傳送至指針位置,清除剩余候選字,移動指針。清除拼音。
字庫
字庫是個非常浩大的工程,本輸入法支持20811個字,其中不同多音字視為各音節(jié)不同的字,累計103個多音字。
那么這個大的字庫我總得有個調(diào)用的好辦法吧?否則實在是難以使用。
上文對拼音的詳解已經(jīng)說明了調(diào)用辦法。
下文以音“中”為例。
中= ZHONG
={26,8,15,14,7,0}
以這樣一個變幻方式我們可以將任何一個音變?yōu)橐唤M6個的數(shù)組。
漢語一共有406種音,所以我們會有406排命令方塊。
這是讀取zhong音的命令。
/execute @e[-11,4,1,r=0,name=set,score_end=26,score_end_min=26] ~ ~ ~ /execute @e[-11,4,2,r=0,name=set,score_end=8,score_end_min=8] ~ ~ ~ /execute @e[-11,4,3,r=0,name=set,score_end=15,score_end_min=15] ~ ~ ~ /execute @e[-11,4,4,r=0,name=set,score_end=14,score_end_min=14] ~ ~ ~ /execute @e[-11,4,5,r=0,name=set,score_end=7,score_end_min=7] ~ ~ ~ /testfor @e[-11,4,6,r=0,name=set,score_end=0,score_end_min=0]
復制代碼
我們可以很清楚的看到6個數(shù)字所代表的位置。
kill @e[0,4,-1000,dz=2000,dx=0,dy=0,type=ArmorStand]
復制代碼
然后我們會激活一串清理現(xiàn)在的候選字的指令。
summon ArmorStand 0 ~ ~ {CustomName:"中",Invisible:1,NoGravity:1,Marker:1}
復制代碼
然后會在x=0的位置召喚出一條候選字紙帶。
故此我們才能夠完整的使用漢字輸入法,那么就是這樣,希望大家喜歡。
- 我的世界籽岷1.9經(jīng)典游戲塞爾達傳說續(xù)集附下載
- 我的世界WorldEdit教程deform指令教程使用例子講解
- 我的世界WorldEdit教程deform指令教程移動后源坐標的使用講解
- 我的世界WorldEdit教程deform指令教程源坐標的使用講解
- 我的世界WorldEdit教程deform指令教程特殊函數(shù)旋轉(zhuǎn)與翻轉(zhuǎn)講解
- 我的世界WorldEdit教程deform指令教程函數(shù)的使用講解
- 我的世界WorldEdit教程deform指令教程變換方程乘除縮放講解
- 我的世界WorldEdit教程deform指令教程變換方程加減移動講解
- 我的世界WorldEdit教程deform指令教程坐標范圍講解
- 我的世界WorldEdit教程deform指令教程可用標示講解
查看所有0條評論>>