1.16.5日本語化リソースパック配布

302個のMODの翻訳が完了したので YouTube にて配布いたします 。翻訳の内容など不備はありますが、無いよりはましだと思って使ってください。翻訳したMODの詳細については、まとめるのが面倒くさいので止めておきます。このリソースパックを導入することがマイクラMOD攻略の近道...

2019年8月12日月曜日

小麦の自動農業プログラム

8x8の農地の小麦の自動農業プログラムです。意外と簡単だと思っていましたが、作物の成長が不確定で骨粉が余ったり、収穫時に種を大量にドロップすることを考えるとチェストへのドロップ操作が必要となります。


8x8の小麦の自動栽培

タートルが、スロットのアイテムを調べるAPI、turtle.getItemDetail() を使いこなすことが重要です。lua>turtle.getItemDetail(スロット)と入力して小麦を調べるます。


戻り値
count = 64,
  スロットにアイテムが、64個ある
name = "minecraft:wheat",
  アイテム名は"マインクラフトの小麦"
damage = 0,
  ダメージは、0

このタートルAPIを使用してチェストにドロップするアイテムを指定します。

失敗した小麦の自動農業プログラム
クワを持ったファーミングタートル


ラージチェスト4個と8x8の農地


タートルの前のチェストに木炭


次のチェストに種
※最終プログラムでは種のドロップするのでスタート時は、1スタックです


次のチェストに骨粉


プログラムスタート、タートルは前のチェストから燃料を補給して農地を耕します


燃料補給、スロット1に種64個、スロット2~4に骨粉を入手


1周目でスロット1の種を植え付けます


2周目でスロット2の骨粉を散布


3周目でスロット3の骨粉を散布


4周目でスロット4の骨粉を散布


最後に収穫します


タートルの農地での動きを考えます

タートルの動きは1~64まで動き最後に1に戻ります
--####1~8までのタートルの動き
for A=1,7 do
    turtle.forward()
end
--####最初の列の移動
turtle.turnRight()
turtle.forward()
turtle.turnRight()
--####9~16までのタートルの動き
for A=1,7 do
    turtle.forward()
end
--####2回目の列の移動
turtle.turnLeft()
turtle.forward()
turtle.turnLeft()

最後の64の地点で、1の位置に戻るので上のタートルの動きは、3回のループ+1で最後の部分の2回目の列の移動をこのようにします
--####最後の列の移動
turtle.turnRight()
for A=1,7 do
    turtle.forward()
end

この基本となるタートルの動きに農地を耕す、小麦を収穫を追加します
--####前に進んで下を破壊
turtle.digDown() 
for A=1,7 do
    turtle.forward()
    turtle.digDown()
end

種を植える、骨粉を散布を追加します
--####前に進んで下に設置
turtle.digDown() 
for A=1,7 do
    turtle.forward()
    turtle.placeDown()
end

※注意
このように最後が前に進むでは農地からはみ出してしまいます
--####下に設置して前に進む
for A=1,7 do 
    turtle.placeDown()
    turtle.forward()
end

上のような場合は、最後が下に設置、もしくは下を破壊となります
--####下に設置して前に進む
for A=1,7 do 
    turtle.placeDown()
    turtle.forward()
end
turtle.placeDown()


タートルの農地でのループを考えます

1回目、耕す、turtle.digDown()
2回目、種を植える、turtle.placeDown()
3回目、骨粉を散布、turtle.placeDown()
4回目、骨粉を散布、turtle.placeDown()
5回目、骨粉を散布、turtle.placeDown()
6回目、収穫、turtle.digDown()


これをループで考えると

タートルが下を破壊、turtle.digDown()、を1回
タートルが下に置く、turtle.placeDown()、を4回


さらにチェストへの動きを考えると

前のチェストから燃料の補給、turtle.refuel()

--####無限ループの開始

--####農地での動き
タートルが下を破壊、turtle.digDown()、を1回

--####チェストでの動き
下のチェストへアイテムをドロップ、turtle.dropDown()
下のチェストから燃料の補給、turtle.refuel()
下のチェストからのアイテムの入手、turtle.suckDown()

--####農地での動き
タートルが下に置く、turtle.placeDown()、を4回

--####無限ループの終わり



--####とりあえず動かしてみるプログラム
--####燃料の補給
turtle.select(1)
turtle.suck()
turtle.refuel()
turtle.up()
--####農地に移動
for A=1,8 do
    turtle.forward()
end
--####無限ループの開始
while true do
--####耕すと収穫のループ
    for A=1,3 do
        turtle.digDown() 
        for A=1,7 do
            turtle.forward()
            turtle.digDown()
        end
        turtle.turnRight()
        turtle.forward()
        turtle.turnRight()
        turtle.digDown() 
        for A=1,7 do
            turtle.forward()
            turtle.digDown()
        end
        turtle.turnLeft()
        turtle.forward()
        turtle.turnLeft()
    end
    turtle.digDown() 
    for A=1,7 do
        turtle.forward()
        turtle.digDown()
    end
    turtle.turnRight()
    turtle.forward()
    turtle.turnRight()
    turtle.digDown() 
    for A=1,7 do
        turtle.forward()
        turtle.digDown()
    end
--####チェストに戻る
    turtle.turnRight()
    for A=1,7 do
        turtle.forward()
    end
    turtle.turnRight()
    turtle.back()
--####収穫チェストにドロップ
    for Slot=1,16 do
        turtle.select(Slot)
        turtle.dropDown()
    end
    for A=1,6 do
        turtle.back()
    end
--####燃料補給
    turtle.select(1)
    turtle.suckDown()
    turtle.refuel()
    for A=1,2 do
        turtle.forward()
    end
--####スロット1、種の補給
    turtle.select(1)
    turtle.suckDown()
    for A=1,2 do
        turtle.forward()
    end
--####スロット2~4骨粉の補給
    for Slot=2,4 do
        turtle.select(Slot)
        turtle.suckDown()
    end
    for A=1,3 do
        turtle.forward()
    end
--####種の植え付けと骨粉の散布3回
    for Slot=1,4 do
        turtle.select(Slot)
        for A=1,3 do
            turtle.placeDown()
            for A=1,7 do
                turtle.forward()
                turtle.placeDown()
            end
            turtle.turnRight()
            turtle.forward()
            turtle.turnRight()
            turtle.placeDown()
            for A=1,7 do
                turtle.forward()
                turtle.placeDown()
            end
            turtle.turnLeft()
            turtle.forward()
            turtle.turnLeft()
        end
        turtle.placeDown()
        for A=1,7 do
            turtle.forward()
            turtle.placeDown()
        end
        turtle.turnRight()
        turtle.forward()
        turtle.turnRight()
        turtle.placeDown()
        for A=1,7 do
            turtle.forward()
            turtle.placeDown()
        end
        turtle.turnRight()
        for A=1,7 do
            turtle.forward()
        end
        turtle.turnRight()
    end
end
--####とりあえず動かしてみるプログラムの終わり




このプログラムは、収穫が終わったタートルが、すべての持ち物を収穫用のチェストにドロップするのでラージチェストがすぐに満杯になります。

満杯になった収穫用のチェスト


こうなるとタートルのインベントリも思い通りにはなりません

問題点は作物の成長が不確実なので、3回の骨粉散布が不確定となり骨粉が余ってしまい収穫用のチェストに入ることと、収穫時にドロップする種の量が多い、これが収穫用のチェストの圧迫の原因です。

問題となる部分
タートルのスロットの全アイテムをドロップする

--####収穫チェストにドロップ
    for Slot=1,16 do
        turtle.select(Slot)
        turtle.dropDown()
    end
    for A=1,6 do
        turtle.back()
    end

変更後
タートルのスロットの指定したアイテムだけをドロップする

--####収穫用のチェストに小麦をドロップ
    for Slot=1,16 do
        turtle.select(Slot)
        local Wheat=turtle.getItemDetail()
        if Wheat then
            if Wheat.name=="minecraft:wheat" then
                turtle.dropDown()
            end
        end
    end
    for A=1,2 do
        turtle.back()
    end
--####骨粉のチェストに余った骨粉をドロップ
    for Slot=1,16 do
        turtle.select(Slot)
        local Dye=turtle.getItemDetail()
        if Dye then
            if Dye.name=="minecraft:dye" then
                turtle.dropDown()
            end
        end
    end
    for A=1,2 do
        turtle.back()
    end
--####種のチェストにドロップした種をドロップ
    for Slot=1,16 do
        turtle.select(Slot)
        local Wheat_Seeds=turtle.getItemDetail()
        if Wheat_Seeds then
            if Wheat_Seeds.name=="minecraft:wheat_seeds" then
                turtle.dropDown()
            end
        end
    end
    for A=1,2 do
        turtle.back()
    end

これで収穫用のチェストに骨粉や種が入ることがなくなりました


燃料の補給もタートルの燃料レベルに合わせて補給するようにします

変更前
燃料補給は、1回のループで必ず行う

--####燃料補給
    turtle.select(1)
    turtle.suckDown()
    turtle.refuel()

変更後
燃料の補給は、燃料レベルが500を下回ったら行う

--####燃料補給
    if turtle.getFuelLevel()<500 then
        turtle.select(1)
        turtle.suckDown()
        turtle.refuel()
    end



--####小麦の自動農業プログラム
--####木炭を満タン、種を1スタック、骨粉を満タンでプログラムをスタート
--####燃料の補給
turtle.select(1)
turtle.suck()
turtle.refuel()
turtle.up()
--####農地に移動
for A=1,8 do
    turtle.forward()
end
--####無限ループの開始
while true do
--####耕すと収穫のループ
    for A=1,3 do
        turtle.digDown() 
        for A=1,7 do
            turtle.forward()
            turtle.digDown()
        end
        turtle.turnRight()
        turtle.forward()
        turtle.turnRight()
        turtle.digDown() 
        for A=1,7 do
            turtle.forward()
            turtle.digDown()
        end
        turtle.turnLeft()
        turtle.forward()
        turtle.turnLeft()
    end
    turtle.digDown() 
    for A=1,7 do
        turtle.forward()
        turtle.digDown()
    end
    turtle.turnRight()
    turtle.forward()
    turtle.turnRight()
    turtle.digDown() 
    for A=1,7 do
        turtle.forward()
        turtle.digDown()
    end
--####チェストに戻る
    turtle.turnRight()
    for A=1,7 do
        turtle.forward()
    end
    turtle.turnRight()
    turtle.back()
--####収穫用のチェストに小麦をドロップ
    for Slot=1,16 do
        turtle.select(Slot)
        local Wheat=turtle.getItemDetail()
        if Wheat then
            if Wheat.name=="minecraft:wheat" then
                turtle.dropDown()
            end
        end
    end
    for A=1,2 do
        turtle.back()
    end
--####骨粉のチェストに余った骨粉をドロップ
    for Slot=1,16 do
        turtle.select(Slot)
        local Dye=turtle.getItemDetail()
        if Dye then
            if Dye.name=="minecraft:dye" then
                turtle.dropDown()
            end
        end
    end
    for A=1,2 do
        turtle.back()
    end
--####種のチェストにドロップした種をドロップ
    for Slot=1,16 do
        turtle.select(Slot)
        local Wheat_Seeds=turtle.getItemDetail()
        if Wheat_Seeds then
            if Wheat_Seeds.name=="minecraft:wheat_seeds" then
                turtle.dropDown()
            end
        end
    end
    for A=1,2 do
        turtle.back()
    end
--####燃料補給
    if turtle.getFuelLevel()<500 then
        turtle.select(1)
        turtle.suckDown()
        turtle.refuel()
    end
    for A=1,2 do
        turtle.forward()
    end
--####スロット2種の補給
    turtle.select(1)
    turtle.suckDown()
    for A=1,2 do
        turtle.forward()
    end
--####スロット2~4骨粉の補給
    for Slot=2,4 do
        turtle.select(Slot)
        turtle.suckDown()
    end
    for A=1,3 do
        turtle.forward()
    end
--####種の植え付けと骨粉の散布3回
    for Slot=1,4 do
        turtle.select(Slot)
        for A=1,3 do
            turtle.placeDown()
            for A=1,7 do
                turtle.forward()
                turtle.placeDown()
            end
            turtle.turnRight()
            turtle.forward()
            turtle.turnRight()
            turtle.placeDown()
            for A=1,7 do
                turtle.forward()
                turtle.placeDown()
            end
            turtle.turnLeft()
            turtle.forward()
            turtle.turnLeft()
        end
        turtle.placeDown()
        for A=1,7 do
            turtle.forward()
            turtle.placeDown()
        end
        turtle.turnRight()
        turtle.forward()
        turtle.turnRight()
        turtle.placeDown()
        for A=1,7 do
            turtle.forward()
            turtle.placeDown()
        end
        turtle.turnRight()
        for A=1,7 do
            turtle.forward()
        end
        turtle.turnRight()
    end
end
--####小麦の自動農業プログラムの終わり




最終的に骨粉が一番最初になくなりました
集まった小麦は22スタックと53個


種は19スタックと3個まで増えました

骨粉のラージチェストを2個に増やすと丁度良くなりそうです

関連サイト
コンピュータークラフトを極める その3

0 件のコメント:

コメントを投稿

関連コンテンツ