turtle.getItemDetail()--選択スロットのアイテムを調べる
turtle.inspectDown()--下のブロックを調べる
この2個のAPIを使いこなすことが、CC攻略のカギとなります
ニンジンとジャガイモを1列ずつ植えます
主な分岐
インスペクトとディティールの組み合わせで複雑な分岐を作っています、インスペクトで下のブロックを調べてメタデータで収穫か骨粉散布化を分岐、アイテム名で収穫作物を調べてディティールでタートルのスロットを選択するようにしています。local There,What=turtle.inspectDown()--下のブロックを調べる
if There then
if What.metadata==7 then--収穫時期なら
if What.name=="minecraft:carrots" then--ニンジンなら
turtle.digDown()--収穫
for Slot=1,16 do
turtle.select(Slot)--ニンジンのスロットを選ぶ
local What=turtle.getItemDetail()
if What then
if What.name=="minecraft:carrot" then
turtle.placeDown()--ニンジンを植える
else
if What.name=="minecraft:potatoes" then--ジャガイモなら
turtle.digDown()--収穫
for Slot=1,16 do
turtle.select(Slot)--ジャガイモのスロットを選ぶ
local What=turtle.getItemDetail()
if What then
if What.name=="minecraft:potato" then
turtle.placeDown()--ジャガイモを植える
else--収穫時期でないなら
for Slot=1,16 do
turtle.select(Slot)--骨粉のスロットを選ぶ
local What=turtle.getItemDetail()
if What then
if What.name=="minecraft:dye" then
turtle.placeDown()--骨粉を散布
燃料補給
燃料の下限値でチェストに戻ります、タートルの位置を把握するために進んだブロック数、列を移動したブロック数、戻ったブロック数を変数としています。リセットする位置も重要となります。
local FuelLevel=25--燃料の下限値
if turtle.getFuelLevel()<FuelLevel then--燃料の下限値
local Line=0--列の移動数のリセット
Line=Line+1--列の移動数に+1をカウント
local Forward=0--進んだブロック数のリセット
Forward=Forward+1--進んだブロック数に+1をカウント
local Uturn=7--折り返して進んだブロック数のリセット
Uturn=Uturn-1--折り返して進んだブロック数に-1をカウント
プログラムの流れ
初期動作
燃料の補給
ジャガイモ32個を入手
ニンジン32個を入手
骨粉を4スタック入手
1周目
1.3.5.7列目を耕しながらニンジンを植え付け
2.4.6.8列目を耕しながらジャガイモを植え付け
2周目以降
骨粉を巻きながら収穫時期を調べて収穫
収穫した作物と同じ作物を植え付け
燃料値が25より少なくなるとチェストへ移動
燃料のチェストで木炭を1補給
ジャガイモのチェストにジャガイモをドロップ
ニンジンのチェストにニンジンをドロップ
骨粉のチェストに骨粉をドロップ
骨粉を4スタック入手
骨粉を入手できなければ待機
燃料値が25より少なくなった地点に戻り作業再開
プログラムスタート前の設定
8x8の農地、
ラージチェスト4個とファーミングタートルを配置
タートルのスロットは空
タートルの前に木炭を数スタック
次のチェストにジャガイモを32個
次のチェストにニンジンを32個
農地の横のチェストに骨粉を満タン
--ニンジンとジャガイモの自動農業プログラム
--燃料レベルでチェストに移動、元の位置から作業再開
local FuelLevel=25--燃料の下限値
turtle.select(1)
turtle.suck(1)
turtle.refuel(1)--燃料補給
turtle.up()
turtle.forward()
turtle.forward()
turtle.forward()
turtle.suckDown(32)--ジャガイモ補給
turtle.forward()
turtle.forward()
turtle.suckDown(32)--ニンジン補給
turtle.forward()
turtle.forward()
for Slot=3,6 do
turtle.select(Slot)
turtle.suckDown()--骨粉補給
end
turtle.forward()
function PlaceDownCarrot()--ニンジンの植え付け関数
for Slot=1,16 do
turtle.select(Slot)
local What=turtle.getItemDetail()
if What then
if What.name=="minecraft:carrot" then
turtle.placeDown()
break
end
end
end
end
function PlaceDownPotato()--ジャガイモの植え付け関数
for Slot=1,16 do
turtle.select(Slot)
local What=turtle.getItemDetail()
if What then
if What.name=="minecraft:potato" then
turtle.placeDown()
break
end
end
end
end
for A=1,3 do--1~6列目までを耕しながら植え付ける
turtle.digDown()
PlaceDownCarrot()
for A=1,7 do
turtle.forward()
turtle.digDown()
PlaceDownCarrot()
end
turtle.turnRight()
turtle.forward()
turtle.turnRight()
turtle.digDown()
PlaceDownPotato()
for A=1,7 do
turtle.forward()
turtle.digDown()
PlaceDownPotato()
end
turtle.turnLeft()
turtle.forward()
turtle.turnLeft()
end
turtle.digDown()--7列目
PlaceDownCarrot()
for A=1,7 do
turtle.forward()
turtle.digDown()
PlaceDownCarrot()
end
turtle.turnRight()
turtle.forward()
turtle.turnRight()
turtle.digDown()--8列目
PlaceDownPotato()
for A=1,7 do
turtle.forward()
turtle.digDown()
PlaceDownPotato()
end
turtle.turnRight()--農地のスタート地点に戻る
for A=1,7 do
turtle.forward()
end
turtle.turnRight()
function MoveChestDropSuck()--チェストにアイテムドロップと補給の関数
for A=1,7 do--燃料のチェストに移動
turtle.forward()
end
turtle.suckDown(1)--燃料の補給
for Slot=1,16 do
turtle.select(Slot)
local What=turtle.getItemDetail()
if What then
if What.name=="minecraft:coal" then
turtle.refuel(1)
end
end
end
turtle.turnRight()
turtle.turnRight()
for A=1,2 do--ジャガイモのチェストに移動
turtle.forward()
end
for Slot=1,16 do--ジャガイモをチェストへドロップ
turtle.select(Slot)
local What=turtle.getItemDetail()
if What then
if What.name=="minecraft:potato" or
What.name=="minecraft:poisonous_potato" then
turtle.dropDown()
end
end
end
for A=1,2 do--ニンジンのチェストへ移動
turtle.forward()
end
for Slot=1,16 do--ニンジンをチェストへドロップ
turtle.select(Slot)
local What=turtle.getItemDetail()
if What then
if What.name=="minecraft:carrot" then
turtle.dropDown()
end
end
end
for A=1,2 do--骨粉のチェストへ移動
turtle.forward()
end
for Slot=1,16 do--余った骨粉をドロップ
turtle.select(Slot)
turtle.dropDown()
end
while true do--骨粉入手の無限ループ
turtle.select(1)--スロット1に
if turtle.suckDown(64) then--骨粉入手
break
else--もし骨粉を入手できなかったら
print("ItemSupply:OsSleep_60ms")
os.sleep(60)--スリープ
end
end
while true do--骨粉入手の無限ループ
turtle.select(2)--スロット2に
if turtle.suckDown(64) then--骨粉入手
break
else--もし骨粉を入手できなかったら
print("ItemSupply:OsSleep_60ms")
os.sleep(60)--スリープ
end
end
while true do--骨粉入手の無限ループ
turtle.select(3)--スロット3に
if turtle.suckDown(64) then--骨粉入手
break
else--もし骨粉を入手できなかったら
print("ItemSupply:OsSleep_60ms")
os.sleep(60)--スリープ
end
end
while true do--骨粉入手の無限ループ
turtle.select(4)--スロット4に
if turtle.suckDown(64) then--骨粉入手
break
else--もし骨粉を入手できなかったら
print("ItemSupply:OsSleep_60ms")
os.sleep(60)--スリープ
end
end
turtle.forward()--農地へ移動
end
function InspectDownPlace()--植え付けと骨粉散布の関数
local There,What=turtle.inspectDown()--下のブロックを調べる
if There then
if What.metadata==7 then--収穫時期なら
if What.name=="minecraft:carrots" then--ニンジンなら
turtle.digDown()--収穫
for Slot=1,16 do
turtle.select(Slot)--ニンジンのスロットを選ぶ
local What=turtle.getItemDetail()
if What then
if What.name=="minecraft:carrot" then
turtle.placeDown()--ニンジンを植える
break
end
end
end
else
if What.name=="minecraft:potatoes" then--ジャガイモなら
turtle.digDown()--収穫
for Slot=1,16 do
turtle.select(Slot)--ジャガイモのスロットを選ぶ
local What=turtle.getItemDetail()
if What then
if What.name=="minecraft:potato" then
turtle.placeDown()--ジャガイモを植える
break
end
end
end
end
end
else--収穫時期でないなら
for Slot=1,16 do
turtle.select(Slot)--骨粉のスロットを選ぶ
local What=turtle.getItemDetail()
if What then
if What.name=="minecraft:dye" then
turtle.placeDown()--骨粉を散布
break
end
end
end
end
end
end
while true do--収穫とチェストへのドロップとアイテム入手の無限ループ
local Line=0--列の移動数のリセット
for A=1,3 do--1~6列目まで
local Forward=0--進んだブロック数のリセット
for A=1,7 do
InspectDownPlace()--植え付けと骨粉散布の関数
if turtle.getFuelLevel()<FuelLevel then--燃料の下限値
turtle.turnLeft()
for A=1,Line do--列の移動数を戻る
turtle.forward()
end
turtle.turnLeft()
for A=1,Forward do--進んだブロック数を戻る
turtle.forward()
end
MoveChestDropSuck()--チェストにアイテムドロップと補給の関数
for A=1,Forward do--戻ったブロック数を進む
turtle.forward()
end
turtle.turnRight()
for A=1,Line do--戻った列の移動数を進む
turtle.forward()
end
turtle.turnLeft()
end
turtle.forward()
Forward=Forward+1--進んだブロック数に+1をカウント
InspectDownPlace()--植え付けと骨粉散布の関数
end
turtle.turnRight()--列の移動
turtle.forward()
Line=Line+1--列の移動数に+1をカウント
turtle.turnRight()
local Uturn=7--折り返して進んだブロック数のリセット
for A=1,7 do
InspectDownPlace()
if turtle.getFuelLevel()<FuelLevel then
turtle.turnRight()
for A=1,Line do
turtle.forward()
end
turtle.turnLeft()
for A=1,Uturn do--折り返して進んだブロック数を戻る
turtle.forward()
end
MoveChestDropSuck()
for A=1,Uturn do--戻った折り返して進んだブロック数を進む
turtle.forward()
end
turtle.turnRight()
for A=1,Line do
turtle.forward()
end
turtle.turnRight()
end
turtle.forward()
Uturn=Uturn-1--折り返して進んだブロック数に-1をカウント
InspectDownPlace()
end
turtle.turnLeft()
turtle.forward()
Line=Line+1
turtle.turnLeft()
end
local Forward=0
for A=1,7 do--7列目
InspectDownPlace()
if turtle.getFuelLevel()<FuelLevel then
turtle.turnLeft()
for A=1,Line do
turtle.forward()
end
turtle.turnLeft()
for A=1,Forward do
turtle.forward()
end
MoveChestDropSuck()
for A=1,Forward do
turtle.forward()
end
turtle.turnRight()
for A=1,Line do
turtle.forward()
end
turtle.turnLeft()
end
turtle.forward()
Forward=Forward+1
InspectDownPlace()
end
turtle.turnRight()
turtle.forward()
Line=Line+1
turtle.turnRight()
local Uturn=7
for A=1,7 do--8列目
InspectDownPlace()
if turtle.getFuelLevel()<FuelLevel then
turtle.turnRight()
for A=1,Line do
turtle.forward()
end
turtle.turnLeft()
for A=1,Uturn do
turtle.forward()
end
MoveChestDropSuck()
for A=1,Uturn do
turtle.forward()
end
turtle.turnRight()
for A=1,Line do
turtle.forward()
end
turtle.turnRight()
end
turtle.forward()
Uturn=Uturn-1
InspectDownPlace()
end
turtle.turnRight()
for A=1,7 do
turtle.forward()
end
turtle.turnRight()
end
--ニンジンとジャガイモの自動農業プログラムの終わり
以前作成した自動農業プログラムでも十分使えるんですが、単なる遊び心でやりすぎ感のある自動農業プログラムを作成しました。もうすぐプログラム歴2か月、独学なんですがコンピュータークラフトの限界に挑戦していきます。
関連サイト
コンピュータークラフトを極める その3
0 件のコメント:
コメントを投稿