Forestry Databaseを利用した半自動鑑定機

未鑑定の蜂や苗木溜まってませんか?
アナライザー を使って鑑定するには気の遠くなる量だったり, 設置型分析器 で自動化するにも液体のハチミツを用意するのも面倒, そもそも鑑定速度が遅い.
そんなあなたにおすすめの Database と アナライザー を使った半自動鑑定機構です.

勢いで書いたので誤った文法, 誤字, 脱字等あると思いますがご容赦を

ここに記載したコード プログラムを利用して生じた損害について,
クリエイター(著者)は一切責任を負いません.
また,記載したコード プログラムに誤りがある場合や,
期待する動作をしない場合,期待しない動作をする場合もあります.
自己責任で利用してください.

環境

Minecraft 1.12
Forestry for Minecraft (以下FFM) ※アドオンを含む
2023/11/14 現在 最新バージョン
CC: Tweaked (ComputerCraft) ※アドオンを含む
2023/11/14 現在 最新バージョン

機構

Database について

FFM 単体のインベントリブロック
約150スロットのインベントリを持つ
検索機能付き
アナライザーを自分のインベントリに入れておくとアナライザータブを開くことができ, アナライザー同様ハニードロップを消費して鑑定することができる
蜂・苗木・蝶等のみ入れることができる
パイプや導管等で搬入できる
搬入のみ可能
搬出はできない!!

そう搬出はできないのである

未鑑定はNBTで判別できそうだな
よし Integrated Dynamics 使おう
NBT発見
Operator沼にハマる ※詳しくはIntegrated Dynamics 備忘録
数時間後  やっとのことフィルター完成
ストレージからDatabaseへ未鑑定の搬入 ヨシッ
Databaseからストレージへの搬出 ・・・
ただの導管搬出・・・ バニラのホッパー・・・
放心状態
作り始める前に確認しましょう 検証は大事

インベントリのスロットを直接操作する

Databaseは搬入は受け付けても搬出はできない.
検証と経験則からいわゆるパイプや導管系の搬出機能に対応していない.
そこでインベントリのスロットを直接操作ならいけそうな気がする.
ということで, みんな大好き ComputerCraft の出番です.

必要資材と構造

ストレージ 1~ 個 チェスト等お好みで 大容量の1ブロックのもの推奨
CC : (アドバンスド)コンピューター または タートル
※搬入出を1つのコンピューター(タートル)で行う場合アドバンスド必須
※タートルのインベントリを使う場合有線モデムを使って自身をWrapする必要があるので非推奨(面倒かつ期待する省スペースにはならない)
FFM : Database
FFM : アナライザー
FFM : ハニードロップ

オプション
CC : 有線モデム
※鑑定後に性質に合わせて別々のストレージに振り分けたい場合 この記事では扱わない

この記事で扱う構造は
ストレージ ⇄ アドバンスドコンピューター ⇄ Database
のような, ストレージに未鑑定を入れるとDatabaseに送られ, 鑑定した後元のストレージに戻る機構である.

プログラム

dataBaseToStorage.lua


storage = peripheral.wrap(side)
dataBase = peripheral.wrap(side)

dataBaseSize = dataBase.size()

while true do
  for i = 1, dataBaseSize do
    if dataBase.getItemMeta(i) then
      if dataBase.getItemMeta(i).individual.analyzed then
        storage.pullItems(peripheral.getName(dataBase), i)
      end
    end
  end
  sleep(0.5)
end

storageToDataBase.lua

storage = peripheral.wrap(side)
dataBase = peripheral.wrap(side)

storageSize = storage.size()

while true do
  for i = 1, storageSize do
    if storage.getItemMeta(i) then
      if not storage.getItemMeta(i).individual.analyzed then
        storage.pushItems(peripheral.getName(dataBase), i)
      end
    end
  end
  sleep(0.5)
end

ana.lua

shell.openTab("dataBaseToStorage")
shell.openTab("storageToDataBase")


1行目, 2行目のsideは各々の環境に合わせて書き換えること
8行目 メタデータを持っているかを判定
9行目 鑑定済みかどうか
※ リファレンスと差異があるので適宜Minecraft内でドキュメントを取得し確認すること
※一見するとNBTを取得しているように見えるが, CCがNBTを扱いやすいような形式に変換してくれているのでNBTと同値になるとは限らない
例 鑑定済み
NBT : {IsAnalyzed:1}
CC : ~.analyzed → true
10行目 インベントリのスロット操作
※ストレージ側のブロックがdataBase.pushItems(peripheral.getName(storage), i) を受け付ない場合があるのでstorage.pullItems(peripheral.getName(dataBase), i) を利用
※ここで鑑定後の性質によって別々のストレージにする場合は条件分岐等を組み込む
念のためのスリープ

ana.lua を実行すれば両方とも起動する
起動後のタブは shell , dataBaseToStorage , storageToDataBase となるので, プログラム名を短くすると画面がスッキリする (ana.luaの書き換えも忘れずに)

未鑑定を入れるストレージに 土とか石とかの異物を入れるとエラーでプログラムが落ちるので気をつける 落ちたらプログラムを終了してまた ana.luaを実行

使い方

アナライザーと(多量の)ハニードロップを自分のインベントリに入れておく
ana.luaを起動
Databaseに未鑑定の蜂等が搬入されているのを確認
Databaseの検索欄に(言語:日本語の場合) "不明" を入れてフィルタリングをする.
アナライザーのタブを開く.
フィルタリング直後はカーソルが先頭になっていないので, ▶ を一度押し, ◀ を一度押し先頭にする.
研究🔬のアイコンを連打 連打 連打 ※カーソルは自動で動くので心配無用
ストレージに鑑定済みの蜂等があれば成功

この記事が気に入ったらサポートをしてみませんか?