跑跑車首頁(yè)

當(dāng)前位置:首頁(yè)攻略秘籍單機(jī)攻略 → 我的世界命令方塊教程瞬間多次調(diào)用與執(zhí)行模塊概念

我的世界命令方塊教程瞬間多次調(diào)用與執(zhí)行模塊概念

作者:佚名來(lái)源:本站整理 發(fā)表時(shí)間:2016/3/22 9:18:54 評(píng)論(0)

小編為大家?guī)?lái)了《我的世界》命令方塊教程瞬間多次調(diào)用與執(zhí)行模塊概念,這只是一個(gè)概念,只是由于我懶得大幅優(yōu)化和弄生成器才拿出來(lái)的,可能大家能幫忙優(yōu)化一下吧。

在研究icb,ccb,rcb的機(jī)制時(shí),我發(fā)現(xiàn)了一個(gè)挺特別的東西,現(xiàn)在就跟大家分享一下

就是當(dāng)ccb被替換成另一個(gè)ccb,它是能夠馬上接受信號(hào)的,舉個(gè)例子

icb:

say start

setblock ~ ~1 ~ 1 replace {Command:"say hi",auto:1b}

say bye

say end

復(fù)制代碼

假設(shè)這cb鏈?zhǔn)窍蛏系,那么它就?huì)把原本為say bye的ccb變?yōu)閟ay hi,當(dāng)信號(hào)到第四個(gè)cb也就是被替換了的那個(gè),它能夠執(zhí)行say hi這個(gè)指令而不是等下一次有信號(hào)才會(huì)執(zhí)行(輸出就是start, hi, end)

因此,我們能夠得到一個(gè)結(jié)論: cb的替換是即時(shí)的,也就是只替換NBT而不是整個(gè)方塊替換

其實(shí)還有一個(gè)特性的,就是替換后的朝向是會(huì)被忽略的(數(shù)據(jù)值和NBT的修改不是同時(shí)的?這就不清楚了,然而我們可以肯定的就是不能如此瞬間轉(zhuǎn)向)

可能你會(huì)問(wèn),這樣子有什么用?

我只能說(shuō)我也不知道,然而我給了一個(gè)技術(shù)上可行然而麻煩到不得了的概念你們看看吧,就是模塊的調(diào)用

整個(gè)概念:

把需要執(zhí)行的模塊clone進(jìn)去主要的執(zhí)行串(主模塊)里,做到多次調(diào)用同樣模塊及1gt內(nèi)執(zhí)行盡量多的循環(huán)類系統(tǒng)

如果剩余空間不足,則會(huì)自動(dòng)把剩下模塊放進(jìn)暫存等待下一個(gè)gt執(zhí)行

**代碼塊里的那些是懶癌衛(wèi)士里的表達(dá)方式,不懂的話可以來(lái)這里看:懶癌衛(wèi)士

//調(diào)用模塊{:

//檢測(cè)空間是否足夠

scoreboard players operation @e[name=start] length -= @e[name=(儲(chǔ)存模塊長(zhǎng)度的marker)] length

scoreboard players test @e[name=start] length 1

//如果空間足夠,則把模塊clone到之后的cb里

cond:/clone (該模塊坐標(biāo)) ~ ~ ~1 

//如果空間不足,則把模塊放進(jìn)暫存里,并且把之后的命令刪除

execute @e[name=start,score_length=0] ~ ~ ~ clone (該模塊坐標(biāo)) (暫存的位置(可能為相對(duì)坐標(biāo),即暫存里start marker的相對(duì)位置)) 

cond:fill ~ ~ ~ ~ ~ ~20 stone 0 replace chain_command_block 3

//即使cond的ccb無(wú)法被刪除,也不能執(zhí)行(前面的cb都被刪除了,不可能成功)

//}

復(fù)制代碼

執(zhí)行空間完結(jié): 轉(zhuǎn)向

原因: 避免被 "fill ~ ~ ~ ~ ~ ~20 stone 0 replace chain_command_block 3"錯(cuò)誤刪除

執(zhí)行空間完結(jié)的指令是必須執(zhí)行的,否則就有可能出現(xiàn)bug

//完結(jié): {

/scoreboard players set @e[name=start] length 11

/clone (暫存) (執(zhí)行空間)

mark:blankCount

//先執(zhí)行scb和stats block (下一個(gè)cb的位置) AffectedBlocks @e[name=blankCount,c=1] length

//上方的只需要執(zhí)行一次,得到stats的鏈接就可以了

/testforblocks (暫存) (空置的比較用暫存)

//把length = 暫存里空置的地方

/scoreboard players operation @e[name=start] length = @e[name=blankCount] length

//清空暫存

fill -12 4 75 -12 4 85 minecraft:chain_command_block 3

//}

復(fù)制代碼

模塊的切割

由于這個(gè)系統(tǒng)里,調(diào)用模塊會(huì)把之后的命令覆蓋掉,所以我們需要把調(diào)用模塊之后的命令放進(jìn)另外一個(gè)模塊里

(或者在調(diào)用的模塊里再寫(xiě)一次也可以)

例子1:

{

say hi

module 1

say bye

}

如果是這種情況,就可以把say bye放進(jìn)module1,或者是把say bye放進(jìn)module2,然后在module1最后的地方調(diào)用。

而主模塊里則不需要寫(xiě)say bye(因?yàn)楸囟〞?huì)被覆蓋)

例子2:

{

say hi

if (testfor @e[name=pca])

module 1

say bye

}

這種情況應(yīng)該也是最常見(jiàn)的,就可以把say bye放進(jìn)module1,并且在主模塊也寫(xiě)一次(一共兩次)。

或者是把say bye放進(jìn)module2,分別在主模塊和module1里調(diào)用。

例子里主模塊的長(zhǎng)度就十幾個(gè)ccb,當(dāng)然真正要做的話就不是那樣子了,而是起碼一百個(gè),不然這就沒(méi)什么用了

這樣子我們就能盡情的壓榨MC的能力,而不會(huì)壓榨到崩潰

而且也能夠更好的做到模塊化(雖然是被閹割了的)

當(dāng)然,現(xiàn)在看來(lái)很麻煩,然而我覺(jué)得也是那些弄成生成器就會(huì)好很多的東西了

可惜的就是這系統(tǒng)很多地方依賴clone,也就是說(shuō)要作出大量的坐標(biāo)計(jì)算(或者是直接用絕對(duì)坐標(biāo))

而且這個(gè)系統(tǒng)效率也不是一般的低...還需要優(yōu)化(目前一大堆命令才能調(diào)用一個(gè)模塊)


玩家評(píng)論
我要點(diǎn)評(píng)

網(wǎng)名 注:您的評(píng)論需要經(jīng)過(guò)審核才會(huì)顯示出來(lái)。

已有 0 位玩家參與點(diǎn)評(píng)
下載排行