Create: Stranded At Sea という Modpack をやっていたら、Create Diesel Generator というModの理解が必要そうだった。Crude Oil をチャンクから引き出すのに Pumpjack が必要なんだけどこの contraption の仕様が ponder みてもよくわからなかったのでソースコードをみた。
自分が動作確認したのは 1.21.1-1.3.8 なんだけどこのプロジェクトのソースコードもタグ管理されてないのでマイクラ 1.21.1 向けブランチ最新を読んだ。
tl;dr
1台の Pumpjack で最大の抽出速度を出すには以下の構成になる。
H***************@***B
*
*
*
O * C
-----------------------
H: Head@: 軸、Bearing ブロックが横付けされた任意のブロックB: Bearing B ブロック、Bearing ブロックを Wrench 右クリックO: HoleC: Crank
H-@距離は16(間のブロックは16),@-B距離は4(間のブロックは4)
一度の CrudeOil 抽出量(mB) = 1000 * H@距離 / @B距離 * (Crank Large なら 2、Small なら 1)
アームの長さ(H@距離と@B距離)は最小4最大16なので上記構成の最大の抽出量は
1000 * 16/4 * 2 = 8000(mB)
Hole のタンク容量最大まで一度に引き出せるように作られているということになる。この場合、Mechanical Pump が一つでは足りなそう。
Contraption 動作条件
基本は Ponder の通りに構築すればよいのだが言及されていないところで気になる点があった。
Crank ブロック横の右クリック長押しインターフェース設定でContraptionの高さちょっとだけ違う。
- Crank ブロックが small 設定のとき: contraption の Bearing B 部の地面からの高さ3(crank と bearing B の間は2ブロック)
- large 設定のとき: 高さ4(crank と bearing の間は3ブロック)
Crank ブロックの small/large 設定は1イテレーション当たりの Crude Oil 抽出量にもかかわってくる。特に理由がなければ large でよいと思う。
Contraption 自体の構築条件は詳しく調査してない。Bearing に接触している軸ブロックと Bearing B の間に3ブロック以上が必要そうなのは確認した。ここが短いと警告が出て contraption 構築がされない。
1イテレーションの Crude Oil 抽出量
Pumpjack のヘッドが上に持ち上がったタイミングで、Crude Oil が抽出され、Pumpjack Hole に一定量の Crude Oil が追加される。このイテレーション1回あたりの追加量は Contraption の形状と Crank の設定次第。
int subtractedAmount = Mth.clamp((int) (1000 * Math.abs((float) headPos / (float) bearingPos)) * (isCrankLarge ? 2 : 1), 0, oilAmount);
bearingPos を最小、headPos を最大、Crank を Large 設定にするとよさそうなのがわかる。
bearingPos/headPos が何なのかというとこれは Contraption のロジックを参照する必要がある。読むのが大変。
bearingPos: 軸から Bearing B ブロックまでの距離headPos: 軸から Head ブロックまでの距離
つまり bearingPos は上で言及した通り、間に3ブロック必要なので最小値は4となる。
headPos の最大値はソースコードを読む限り16ブロック。これは検証していない。
今回は Contraption をチャンクに収めるために 16-1-4 = 11 の構成とした。Contraption になったらエンティティ扱いだしチャンクに収める意識は不要そうなんだけど、あんまり大きくある必要がないっていうのもあってこれで済ませた。




