2019年8月14日水曜日

metadate を使いこなす

自動農業で野菜の成長度合いに合わせて骨粉を散布するか、収穫をするのかを判別、さらに収穫した野菜と同じ作物を植え付けるプログラムです。複雑な分岐となってますが、コピペして多少の修正をするだけで作れます。

turtle.inspectDown()--下のブロックを調べる
ジャガイモとニンジンの判別、成長度合いの判定を if 文で分岐

turtle.getItemDetail()--スロットのアイテムを調べる
ランダムに入ったタートルのスロットから骨粉、ジャガイモ、ニンジンを選別

マイクラのアイテムID

minecraft:carrot--収穫したニンジン
minecraft:carrots--収穫前のニンジン
minecraft:potato--収穫したジャガイモ
minecraft:potatoes--収穫前のジャガイモ
minecraft:dye--骨粉

ComputerCraft1.80pr1
ニンジンを植えます

lua エンター、turtle.inspectDown() エンター
※lua から抜けるときは exit() エンターです
戻り値
true
{
    state = {
      age = 0,
    },
    name = "minecraft:carrots",
    metadata = 0,
}
骨粉を1回散布


戻り値
true
{
    state = {
      age = 5,
    },
    name = "minecraft:carrots",
    metadata = 5,
}


骨粉をさらに散布してニンジンを収穫できるまで育てます


戻り値
true
{
    state = {
      age = 7,
    },
    name = "minecraft:carrots",
    metadata = 7,
}




収穫時期は、metadata = 7,となります

if 文の分岐の考え方はこのようになります

下のブロックを調べる

ニンジンなら
収穫時期なら破壊
スロットからニンジンを選び植える
収穫時期でないなら
スロットから骨粉を選び散布

ジャガイモなら
収穫時期なら破壊
スロットからジャガイモを選び植える
収穫時期でないなら
スロットから骨粉を選び散布

タートルの前8ブロックにジャガイモとニンジンをランダムに植えます
自動設置ではありません


タートルのインベントリはスロット1に木炭1スタック、残りは多少の余白を空けて骨粉


耕す、植え付け、骨粉散布、収穫のような完全自動ではありません、あくまでのメタデータを使いこなすための試作プログラムです



--####ジャガイモとニンジンの区別と収穫時期の判別プログラム
turtle.select(1)
turtle.refuel(1)
turtle.up()
for A=1,30 do 
    for A=1,8 do
        turtle.forward()
        local There,What=turtle.inspectDown()
        if There then
            if What.name=="minecraft:carrots" then
                if What.metadata==7 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
                    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
            else
                if What.name=="minecraft:potatoes" then
                    if What.metadata==7 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
                    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
        end
    end
    for A=1,8 do
        turtle.back()
    end
    turtle.select(1)
    turtle.refuel(1)
end
--####ジャガイモとニンジンの区別と収穫時期の判別プログラムの終わり

自動農業のプログラムはもっと簡単にできるんですが・・・
より完成度の高いプログラムを目指して無駄なことをやっているという自覚はあります。

0 件のコメント:

コメントを投稿