2019年7月14日日曜日

チェストへの分類輸送

24x24の露天掘りプログラムのクアーリーマイナスの採掘アイテムを入れるチェストは、ラージチェスト1個だけなので当然アイテムはあふれます。必要となるのは、倉庫へのアイテム輸送システム。ただ輸送するだけなら面白くないので丸石、土、鉱石類を仕分けするプログラムを考えました。

タートルのスロットを制御できるかどうかが、プログラムの可能性と高めることになりそうです。

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 件のコメント:

コメントを投稿