Skip to content

🧲 バキューム移動と位相シフト (MC 26.1.2)

📌 リポジトリソースに関する免責事項: 本 Wiki のドキュメントはリポジトリ内の現在のソースコード状態を反映しており、CurseForge や Modrinth での一般公開リリースビルドに先立つ最新の未リリースコミットや開発中の機能が含まれている場合があります。

機能インフォボックス技術パラメータ
システムクラスnet.instantgratification.magnet.MagnetMovement
トリガーイベントサーバー側プレイヤータスク (PlayerMixin $\rightarrow$ MagnetManager.tick)
デフォルト吸引範囲12 ブロック (ig:magnet_range)
デフォルト終端速度80% ($0.8\text{ blocks/tick} = 16.0\text{ m/s}$)
デフォルト加速度10% ($0.10\text{ lerp factor/tick}$)
位相シフト (NoClip)有効 (ig:magnet_noclip = true)
ターゲットベクトルプレイヤー視線位置 (player.getEyePosition())
地上オフセット加算entity.onGround() 時に Y 軸 $+0.05\text{ m}$

📖 システム概要

Minecraft 26.1.2 において、バキュームエンジンはプレイヤーの球状半径内にある有効な ItemEntity インスタンスを継続的に追跡し、線形補間(Lerp)を用いて目の高さへ直接引き寄せます。

位相シフト (NoClip) が有効な場合、アイテムは固体の壁やブロックを滑らかにすり抜け、採掘や戦闘中に障害物の裏側にドロップが取り残されるのを防止します。

+-------------+      Line-of-Sight OK      +----------------------+      Lerp Velocity Applied      +------------------+
| Item Entity | -------------------------> | Set NoClip (2 Ticks) | ------------------------------> | Player Eye Pos   |
+-------------+                            +----------------------+                                 +------------------+
                                                      |
                                                      v
                                           [Cancel Wall Pushout]
                                           [Bypass Block Collide]
                                           [Cancel In-Wall Grav]

🧮 物理演算とベクトル数学

1. 方向単位ベクトル

$$\vec{v}{\text{target}} = \vec{p}{\text{eye}} - \vec{p}{\text{entity}}$$ $$\hat{d} = \frac{\vec{v}{\text{target}}}{|\vec{v}_{\text{target}}|}$$

2. 速度補間

$$\text{Speed Scalar } s = \frac{\text{GameRule}(\text{ig:magnet_speed})}{100.0} = 0.8\text{ blocks/tick}$$ $$\vec{u}{\text{target}} = \hat{d} \times s$$ $$\text{Acceleration Factor } a = \frac{\text{GameRule}(\text{ig:magnet_acceleration})}{100.0} = 0.10$$ $$\vec{v}{\text{new}} = \vec{v}{\text{current}} + (\vec{u}{\text{target}} - \vec{v}_{\text{current}}) \times a$$

3. 接地時の摩擦防止ブースト

java
if (entity.onGround()) {
    entity.setOnGround(false);
    entity.setPos(entity.position().add(0, 0.05, 0));
}

🧱 位相シフト (NoClip エンジン)

  1. 状態のアクティブ化: ((IMagnetEntity) entity).ig$setMagnetNoClip() により 2 ティックのカウントダウンが開始されます。
  2. 物理演算の上書き (MixinEntity.java):
    • move(MoverType, Vec3): @Inject(at = @At("HEAD"))originalNoPhysics をキャッシュし、entity.noPhysics = true を設定します。
    • move(MoverType, Vec3): @Inject(at = @At("RETURN"))entity.noPhysics = originalNoPhysics を復元します。
  3. 押し出し防止: @Inject(method = "moveTowardsClosestSpace", at = @At("HEAD"), cancellable = true) により、バニラの壁押し出し力を遮断します。
  4. 壁内重力キャンセル: @Inject(method = "applyGravity", at = @At("HEAD"), cancellable = true) により、アイテムが物理的にブロックボクセルの内側にある場合のみ重力をキャンセルします。

⚙️ 関連設定とゲームルール

GameRuleデフォルト説明
ig:magnet_enabledBooleantrueバキュームメカニクスのマスター切り替え。
ig:magnet_rangeInteger12吸引半径(ブロック単位、1〜64)。
ig:magnet_speedInteger80終端速度のパーセンテージ ($80 = 0.8\text{ b/t}$)。
ig:magnet_accelerationInteger10加速度補間係数のパーセンテージ ($10 = 10%\text{ lerp/tick}$)。
ig:magnet_noclipBooleantrue引き寄せ中のブロック位相シフト(すり抜け)を有効化。

🔗 関連 Wiki ドキュメント

Official documentation & web portal for Dasik Igaijinn mods.