Logicoolゲーミングマウスのマクロで特定の操作を繰り返し実行するコードを以前にご紹介させていただきました。それを応用してマインクラフトで自動で畑に植え付けを行うマクロを作ってみたいと思います。
マインクラフトでの栽培について
マイクラではジャガイモやニンジンなど様々な作物を耕地ブロックに植えて、成長後に収穫することができます。収穫した作物はそのまま食べたり、調理したり、村人と交換したりできます。
用途によっては大量に必要となるため、数十から百以上のブロックにかけて作物を植えていくのですが、1ブロックずつ右クリックで植えていくのは大変です。
右クリックを押しっぱなしにして、耕地ブロックに視点を合わせながら移動すると連続で植えてくれるのですが、それでもまだ細かく移動を制御しなければならないので面倒ですし、指が疲れてしまいます。
そこで、今回は田植えの動作を自動で行うマウスマクロを作ってみたいと思います。
実行中の様子
4面の畑があり、ニンジンを 2面、ジャガイモを 2面に植えています。
1面ごとにマクロで植え付けを行っており、次の畑への移動やアイテムの切り替えは手動による操作です。
最後の 4面ではスタート時に視点方向がずれてしまったため、ターゲットがかなり際どくなっています。
サンプルの動作
サンプルの大体の動作は以下の図のようになります。
茶色の四角が耕地ブロック、赤や青の線がキャラクターの動きを示しています。1 マス先の耕地ブロックに作物を植えていくため、耕地ブロックの 1 ブロック前からキャラクターはスタートしています。
スタート地点で右クリックしたままの状態をキープし、手に持った作物を使い続ける状態にします。その状態で図の線のようにキャラクターを動かすことで作物を植えていき、最後に右クリックを解除しています。
上の図から以下の 4 つの動作が必要なことが分かります。
- マウスの右ボタンを押す(右クリック維持)
- 縦に移動する(①)
- 横に移動する(②)
- マウスの右ボタンを離す(右クリック解除)
今回のサンプルでは 1. → (2., 3.)の繰り返し → 4. の順番で処理を行うマクロを作成します。
サンプルコード
function OnEvent(event, arg)
--OutputLogMessage("event = %s, arg = %s\n", event, arg);
-- イベントが発生したボタン番号をチェックする
if arg == 4 and event == "MOUSE_BUTTON_PRESSED" then
-- 右ボタンを押した状態にする
PressMouseButton( 3 )
-- 横方向の繰り返しカウント
nHorizontalCnt = 0
while nHorizontalCnt < 4 do
-- 進む方向を決定する
if nHorizontalCnt % 2 == 0 then
-- 偶数回なら前進するために wキーをセットする
strVerticalKey = "w"
else
-- 奇数回なら後退するために sキーをセットする
strVerticalKey = "s"
end
-- 縦方向の繰り返しカウント
PressKey( strVerticalKey )
Sleep( 2100 )
ReleaseKey( strVerticalKey )
-- 横方向に移動する
PressKey( "a" )
Sleep( 230 )
ReleaseKey( "a" )
Sleep( 100 )
nHorizontalCnt = nHorizontalCnt + 1
end
-- 右ボタンを離した状態にする
ReleaseMouseButton( 3 )
end
end
コード解説
マクロの起動に使いたいボタンが押されたかチェックする
対象行 : 4 ~ 5 行目
-- イベントが発生したボタン番号をチェックする
if arg == 4 and event == "MOUSE_BUTTON_PRESSED" then
マクロを起動したいマウスボタンでボタン押下イベントが発生したかをチェックしています。サンプルでは番号4 のマウスボタンを押した時にマクロの処理を行うようにしています。
右クリックを維持する
対象行 : 7 ~ 8 行目
-- 右ボタンを押した状態にする
PressMouseButton( 3 )
手に持ったアイテム(作物)を使い続けるように、マウスの右ボタンを押した状態にしています。
横方向の繰り返し処理
対象行 : 9 ~ 38 行目
-- 横方向の繰り返しカウント
nHorizontalCnt = 0
while nHorizontalCnt < 4 do
~
<2.縦方向の移動(①)と3.横方向の移動(②)>
nHorizontalCnt = nHorizontalCnt + 1
end
11行目の while と 38行目の end の間に記述されている処理が「2.縦方向の移動(①)」と「3.横方向の移動(②)」になり、nHorizontalCnt 変数の値が 4 より小さい間はこれらの処理を繰り返します。
今回のサンプルでは 4列に作物を植えていきます。nHorizontalCnt という変数を 0 で初期化し、1列植えるたびにカウントアップします。4列植え終わったタイミングで nHorizontalCnt が 4 となり、「nHorizontalCnt < 4」の条件を満たさなくなりますので、繰り返し処理を終了します。
進行方向に合わせて押すキーを設定する
対象行 : 13 ~ 22 行目
-- 進む方向を決定する
if nHorizontalCnt % 2 == 0 then
-- 偶数回なら前進するために wキーをセットする
strVerticalKey = "w"
else
-- 奇数回なら後退するために sキーをセットする
strVerticalKey = "s"
end
縦の移動については前進するパターンと後退するパターンがあり、前進するには wキー、後退するには sキーを押す必要があります。
次の移動でどのキーを押すかを strVerticalKey 変数にセットしています。
1回目と3回目の移動では前進する必要があります。nHorizontalCnt は 0 からカウントアップを始めていますので、nHorizontalCnt が偶数である 0 と 2 の時は前進を行います。
一方で 2回目と4回目の処理、つまり nHorizontalCnt が奇数である 1 と 3 の時は後退が必要です。
「nHorizontalCnt % 2」は nHorizontalCnt を 2 で割った余りを計算しており、nHorizontalCnt が偶数の場合は 0、奇数の場合は 1 となります。
そこで、「nHorizontalCnt % 2」が 0(偶数)の場合は wキー(前進)を、 1(奇数)の場合は sキー(後退)を strVerticalKey にセットしています。
縦方向に移動する
対象行 : 24 ~ 27 行目
-- 縦方向の繰り返しカウント
PressKey( strVerticalKey )
Sleep( 2100 )
ReleaseKey( strVerticalKey )
移動方向に合わせて前の処理で strVerticalKey にセットしたキー(w or s) を押し、縦方向に移動しています。
w または sキーを押した後、Sleep関数で 2100ミリ秒待機した後でキーを離すことで、縦1列に作物を植えたタイミングで移動が止まるようにしています。待機時間は 1列のブロック数や PC環境によって変わると思いますので、行き過ぎたり移動が足りない場合は Sleep の時間を調整してください。
横方向に移動する
対象行 : 30 ~ 34 行目
-- 横方向に移動する
PressKey( "a" )
Sleep( 230 )
ReleaseKey( "a" )
Sleep( 100 )
縦方向に植え終わったタイミングで、左の列に移動するために aキーを押しています。右の列に移動するように処理したい場合は dキーを押すように変更してください。
また、行き過ぎたり移動が足りない場合は Sleep の時間を調整してください。
右クリックを解除する
対象行 : 40 ~ 41 行目
-- 右ボタンを離した状態にする
PressKey( "a" )
ReleaseMouseButton( 3 )
マウスの右ボタンの押下状態を最後に解除して、アイテム(作物)を使い続ける状態を解除しています。
最後に
自動で植え付けを行うマクロはいかがでしたでしょうか。キーやマウスボタンの繰り返し処理について、マイクラ以外でも何かの時に自動化の参考になりましたら幸いです。
また、1つのアイテムスロットに 64個までしかアイテムをセットできないため、64ブロック以上の畑に植え付けを行う場合は、マウススクロールなどでアイテムスロットを切り替える処理を入れると良さそうです。
Logicoolゲーミングマウスのマクロ(スクリプト)関連ページ一覧
皮脂や唾、手垢、汗などで表面は見えない雑菌だらけです。 衛生上も問題ですし、気持ち良く使うためにも、こまめに拭きとってキレイにしましょう。