タートルのスロットを制御できるかどうかが、プログラムの可能性と高めることになりそうです。
turtle.getItemDetail(スロット)--スロットのアイテムを調べる
このタートルAPIを使いこなせれば色々なことができそうです。
プログラム自体は長くなりましたが、範囲が固定なので内容はかなり簡単です。チェストを増やしてマイクラのアイテムIDを細かく登録すれば、完全なるアイテム輸送管理システムも可能となります。
24x24の範囲を岩盤まで掘りぬいた結果は、丸石のチェストが足りませんでした。土のチェストは空き容量が多かったです。Y値が70と高かったことと地形的なことが要因と考えられます。チェストの数を6x4=24まで増やした方がいいかもしれません。
右から前がマイニングタートル
後ろが輸送タートル
タートルの横がアイテム回収チェスト
その左が燃料チェスト
その他は倉庫チェスト
残りの4x4=16のチェストが倉庫チェストとなります
輸送タートルが分類してチェストに入れていきます
燃料チェストに多少の燃料を入れておきます
マイニングと輸送タートルに多少の燃料を入れてスタート
マイニングタートルは動き出します
輸送タートルは下のチェストにアイテムが入るまで動きだしません
チェストの上で待機中の輸送タートルにマイニングタートルが、回収アイテムをチェストに入れると輸送タートルは、アイテムをチェストから入手して動き出します。
採掘アイテムチェストにマイニングタートルが採掘アイテムを入れます
燃料チェストには燃料が入ります
チェスト1~8までは丸石が入ります
チェスト9~12までは土が入ります
チェスト13には鉱石類が入ります
チェスト14~16までには、その他のアイテムが入ります
--####アイテム回収分別プログラム
turtle.up()
turtle.turnLeft()
turtle.forward()
--####メインの処理
--採掘アイテムの回収
for MAIN=1,100 do--MAINの処理を1~100回ループ
turtle.select(1)--スロット1を選択
while true do--無限ループの開始
if turtle.suckDown() then--スロット1にアイテムを回収できたら
break--無限ループの終わり
else os.sleep(10)--アイテム回収できなかったら10秒停止
end--もしもアイテム回収できたらの終わり
end--無限ループの終わり
for A=2,16 do--タートルのスロットを2~16までループ変数は、「A」
turtle.select(A)--タートルはスロット変数「A」を選択
turtle.suckDown()--下からのアイテムを吸収
end--スロットのループ「A」の終わり
--燃料のチェストに石炭を入れる
turtle.forward()--前に行く
turtle.forward()--前に行く
for A=1,16 do--タートルのスロットを1~16までループ変数は、「A」
turtle.select(A)--タートルはスロット変数「A」を選択
local DATA=turtle.getItemDetail()--関数「DATA」を定義して実行
if DATA then--もしもタートルのスロットに「DATA」があるなら
if DATA.name=="minecraft:coal" then--もしも「DATA」が石炭なら turtle.dropDown()--下に落とす
end--もしもの終わり
end--もしもの終わり
end--スロットのループ「A」の終わり
--倉庫、1.2.3.4のチェストに丸石を入れる
for B=1,4 do--ループ「B」はチェストを移動
turtle.forward()
turtle.forward()
for A=1,16 do
turtle.select(A)
local DATA=turtle.getItemDetail()
if DATA then
if DATA.name=="minecraft:cobblestone" then
turtle.dropDown()
end
end
end
end
--次の列への移動
turtle.turnRight()
turtle.forward()
turtle.forward()
turtle.forward()
turtle.turnRight()
--倉庫、5のチェストに丸石を入れる
for A=1,16 do
turtle.select(A)
local DATA=turtle.getItemDetail()
if DATA then
if DATA.name=="minecraft:cobblestone" then
turtle.dropDown()
end
end
end
--倉庫、6.7.8のチェストに丸石を入れる
for B=1,3 do--ループ「B」はチェストを移動
turtle.forward()
turtle.forward()
for A=1,16 do
turtle.select(A)
local DATA=turtle.getItemDetail()
if DATA then
if DATA.name=="minecraft:cobblestone" then
turtle.dropDown()
end
end
end
end
--次の列への移動
turtle.turnLeft()
turtle.forward()
turtle.forward()
turtle.forward()
turtle.turnLeft()
--倉庫、9のチェストに土を入れる
for A=1,16 do
turtle.select(A)
local DATA=turtle.getItemDetail()
if DATA then
if DATA.name=="minecraft:dirt" then
turtle.dropDown()
end
end
end
--倉庫、10.11.12のチェストに土を入れる
for B=1,3 do--ループ「B」はチェストを移動
turtle.forward()
turtle.forward()
for D=1,16 do
turtle.select(D)
local DATA=turtle.getItemDetail()
if DATA then
if DATA.name=="minecraft:dirt" then
turtle.dropDown()
end
end
end
end--ループ「B」の終わり
--次の列に移動
turtle.turnRight()
turtle.forward()
turtle.forward()
turtle.forward()
turtle.turnRight()
--倉庫、13のチェストに鉱石を入れる
for A=1,16 do
turtle.select(A)
local DATA=turtle.getItemDetail()
if DATA then
if DATA.name=="minecraft:iron_ore" or
DATA.name=="minecraft:gold_ore" or
DATA.name=="minecraft:diamond" or
DATA.name=="minecraft:redstone" or
DATA.name=="minecraft:emerald" then
turtle.dropDown()
end
end
end
--倉庫、14.15.16のチェストに残ったアイテムを入れる
for B=1,3 do--ループ「B」はチェストを移動
turtle.forward()
turtle.forward()
for A=1,16 do
turtle.select(A)
turtle.dropDown()
end
end--ループ「B」の終わり
--倉庫、1のチェストに戻る
turtle.turnRight()
for C=1,9 do--ループ「C」は、1のチェストに移動
turtle.forward()
end--ループ「C」の終わり
--燃料チェストで燃料の補給
turtle.turnLeft()
turtle.forward()
turtle.forward()
turtle.suckDown(1)
turtle.refuel()
--採掘アイテムチェストへ移動
turtle.forward()
turtle.forward()
turtle.turnRight()
turtle.turnRight()
end--ループ「MAIN」の終わり
エクセルコピーでやってるもんで、インデントがめんどくなった。
基本となるチェストに指定のアイテムを入れるプログラムです。16のスロットを順番に調べていき、指定したアイテムだったら、下(チェスト)に落とします。
for A=1,16 do--タートルのスロットを1~16まで変更するループ 「A」
turtle.select(A)--タートルは、1.2.3...とスロットを変更していきます
local DATA=turtle.getItemDetail()--スロットのアイテムを調べる
if DATA then--もしも調べることに成功したら
if DATA.name=="minecraft:cobblestone" then--もしも丸石なら
turtle.dropDown()--下に落とす
end--もしもの終わり
end--もしもの終わり
end--ループ「A」の終わり
lua、エンター
turtle.getItemDetail(スロット)、エンター
これでどのようにデータが返されているかがわかります
count=64
name="minecraft:cobblestone"
damage=0
タートルの動き出しを制御するプログラムです。採掘アイテムチェストに何も入ってないとタートルを停止させます。「while true do」の無限ループで、スロット1にアイテムを回収できたらプログラムは動き出す、回収できなければスリープ10秒とします。
turtle.select(1)--スロット1を選択
while true do--無限ループの開始
if turtle.suckDown() then--スロット1にアイテムを回収できたら
break--無限ループの終わり
else os.sleep(10)--アイテム回収できなかったら10秒停止
end--もしもアイテム回収できたらの終わり
end--無限ループの終わり
縦方向にチェストの数を増やすときは、4か所ある「B」のループの最大値を増やします。
for B=1,4 do--ループ「B」はチェストを移動
for B=1,3 do--ループ「B」はチェストを移動
関連サイト
0 件のコメント:
コメントを投稿