iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
Software Development

在麥塊的農場裡寫 Lua系列 第 29

Day29 自動合成物品的小烏龜與指令

上次已經玩過挖礦龜 Mining Turtle,此外還有其他幾個類似的小烏龜
包括 Digging Turtle、Felling Turtle、Farming Turtle
但用法非常相似,所以我留待最後一天一起介紹

今天先來看看 CC: Tweaked 一個很特別的小烏龜
Crafty Turtle

合成公式如下

  • Turtle + 工作台 = Crafty Turtle
  • Advanced Turtle + 工作台 = Advanced Crafty Turtle
  • Crafty Turtle + Speaker = Crafty Noisy Turtle
  • Advanced Crafty Turtle + Speaker = Advanced Crafty Noisy Turtle
  • Crafty Turtle + Wireless Modem = Crafty Wireless Turtle
  • Advanced Crafty Turtle + Wireless Modem = Advanced Crafty Wireless Turtle
  • Crafty Turtle + Ender Modem = Crafty Ender Turtle
  • Advanced Crafty Turtle + Ender Modem = Advanced Crafty Ender Turtle
  • Crafty Turtle + 鑽石斧 = Crafty Felling Turtle
  • Advanced Crafty Turtle + 鑽石鏟 = Advanced Crafty Digging Turtle
  • 依此類推 .....

也就是說一隻合成龜你只能再給牠聲音、網路、作業工具三選一
而它的實際作用如其名,可以做自動合成
你必須把牠的儲物箱左上方的 9 格當作是工作台的合成箱
以編號來說,就是
1, 2, 3
5, 6, 7
9, 10, 11
合成後會把產物放在有空位的其他格子
來看圖更清楚
CC: Tweaked Crafty Turtle
像這樣擺 8 個鵝卵石,就可以得到一個熔爐

直接在 Lua 互動環境中輸入 turtle api craft() 即可

turtle.craft()

CC: Tweaked Crafty Turtle

如果你材料夠多,也可以一次產出多個東西
CC: Tweaked Crafty Turtle
這將就可以一次產出三個物品

turtle.craft(3)

材料不夠,或是擺放位置無法合成任何物品時時,craft 回傳 false
並印出訊息 No matching recipes

而如果你只是想知道目前的排列,是否可以合成出什麼東西
並不打算真的作合成,可以輸入

turtle.craft(0)

如果你想要邊挖礦,邊做合成,就可能需要
(Advanced) Crafty Mining Turtle
在地底挖礦,會得到大量鵝卵石,可以馬上組合成鵝卵石半磚、鵝卵石牆等

要怎麼讓小烏龜自己拿東西

至今為止,都是我手動拿東西給小烏龜,包括燃料
那麼,難道不能更懶一點,叫小烏龜自己拿,我告訴牠我的儲物箱位置就好嗎?
有的!可以!而且這倒不是 Crafty Turtle 專屬
只要是 Turtle 都可以
有三個 API suck(), suckUp(), suckDown() 取其吸收的英文原意
分別是拿取前方物品、拿取上方物品、拿取下方物品
而且這包括前方、上方、下方的儲物箱
除了儲物箱之外,有暫時存放物品的東西也可以,包括木桶、漏斗、漏斗礦車 ... 等等
所以只要把小烏龜移到儲物箱並執行 turtle.suck() 就可以一次一組東西
例如 10 個鵝卵石、20 個樺木材

如果想要精準的控制取得的個數
那麼可以執行

turtle.suck(3)

就會只取得 3 個單位的物品,例如 3 個鵝卵石或 3 個樺木材等等,就看儲物箱放什麼

像這張圖,只要執行 turtle.suckUp() 就可以從上方儲物箱拿取物品
CC: Tweaked Turtle Funnel

讓小烏龜當儲物箱,被動取得所需物品

小烏龜的合成公式裡頭,就有一個儲物箱
所以你完全可以把它當作儲物箱使用,而且還是個可以移動的儲物箱喔!!
一樣看上面那圖
我故意把漏斗導向小烏龜,這樣漏斗一有東西,就直接進了小烏龜的肚子裡
這是小烏龜被動取得物品的方式

要怎麼移動小烏龜儲物箱內的物品

稍早前說到合成,需要特定的「排列」才能「組合」成功
但總不可能每次要組合的時候,得還要親自去幫小烏龜排好材料吧!
能讓它自己排好嗎?我就是懶!
小烏龜提供了 turtle.transferTo( slotNum, [quantity] ) 這個 API
可以把目前的物品,移動 quantity 數量到指定的 slot

我們可以這樣寫

turtle.select(1)    -- 選擇小烏龜第一格 slot
local data = turtle.getItemDetail() -- 接著判斷是否為鵝卵石
if data.name == 'minecraft:cobblestone' and data.count >= 8 then
    turtle.transferTo(2, 1)
    turtle.transferTo(3, 1)
    turtle.transferTo(5, 1)
    turtle.transferTo(7, 1)
    turtle.transferTo(9, 1)
    turtle.transferTo(10, 1)
    turtle.transferTo(11, 1)

    turtle.craft()
end

這樣就會把第一格的鵝卵石放置到其他地方,以便最後組合成熔爐
當然這是很單純的情況,它身上只有第一格有鵝卵石,其他都是空的
實際情況應該是更複雜,就得自己做各種判斷了

讓小烏龜自動把物品放進儲物箱

現在小烏龜已經可以主動或被動拿取物品
並自動合成新的物品
那如果要取得這些合成品呢?
之前我在 Mining Turtle 的探索中,把小烏龜挖到的東西全都倒在地上,然後自己過去撿起來
這是一種方式
用的函數是 turtle.drop()

不過事實上,它是可以自動幫我們放回儲物箱的!
同樣是上面那張圖
我可以這樣寫

turtle.select(3)
turtle.dropUp()

這樣就可以把第三格的物品全部放回到儲物箱,主人不用三不五時去找小烏龜撿東西 XD

如果要精準的控制放置的數量,就是

turtle.dropUp(10) -- 只會放 10 個物品到儲物箱

今天的分享到這裡
最後一回,我打算把之前玩過的再拿回來應用一番
明天見~


上一篇
Day28 小烏龜自動掘井挖隧道
下一篇
Day30 小烏龜應用整合篇
系列文
在麥塊的農場裡寫 Lua30

尚未有邦友留言

立即登入留言