Skip to content

🧲 Movimiento de Vacío y Cambio de Fase (MC 26.1.2)

📌 Descargo de Responsabilidad del Código del Repositorio: La documentación de esta Wiki refleja el estado actual del código fuente en el repositorio, que puede incluir confirmaciones recientes no publicadas o características en desarrollo antes de las versiones públicas en CurseForge y Modrinth.

Infobox de CaracterísticaParámetros Técnicos
Clase del Sistemanet.instantgratification.magnet.MagnetMovement
Evento DesencadenanteTick del Jugador en Servidor (PlayerMixin $\rightarrow$ MagnetManager.tick)
Alcance de Atracción por Defecto12 bloques (ig:magnet_range)
Velocidad Terminal por Defecto80% ($0.8\text{ bloques/tick} = 16.0\text{ m/s}$)
Aceleración por Defecto10% ($0.10\text{ factor lerp/tick}$)
Cambio de Fase (NoClip)Habilitado (ig:magnet_noclip = true)
Vector de DestinoPosición de Ojos del Jugador (player.getEyePosition())
Impulso de Despegue en Suelo$+0.05\text{ m}$ en eje Y cuando entity.onGround()

📖 Visión General del Sistema

En Minecraft 26.1.2, el motor de aspiración rastrea continuamente las instancias válidas de ItemEntity dentro del radio esférico del jugador y las atrae directamente hacia el nivel de los ojos mediante interpolación lerp.

Con el Cambio de Fase (NoClip) activo, los objetos atraviesan suavemente paredes y bloques sólidos, evitando que las recompensas queden atrapadas detrás de obstáculos durante la minería o el combate.

+---------------+     Línea de Visión OK     +------------------------+     Velocidad Lerp Aplicada     +--------------------+
| Item Entity   | -------------------------> | Activar NoClip (2 Ticks)| ------------------------------> | Pos. Ojos Jugador  |
+---------------+                            +------------------------+                                 +--------------------+
                                                         |
                                                         v
                                              [Cancelar Empuje Pared]
                                              [Ignorar Colisión Bloque]
                                              [Cancelar Grav. en Pared]

🧮 Física y Matemáticas Vectoriales

1. Vector Unitario Direccional

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

2. Interpolación de Velocidad

$$\text{Escalar de Velocidad } s = \frac{\text{GameRule}(\text{ig:magnet_speed})}{100.0} = 0.8\text{ bloques/tick}$$ $$\vec{u}{\text{target}} = \hat{d} \times s$$ $$\text{Factor de Aceleración } 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. Impulso Antifricción en Suelo

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

🧱 Cambio de Fase (Motor NoClip)

  1. Activación de Estado: ((IMagnetEntity) entity).ig$setMagnetNoClip() activa una cuenta regresiva de 2 ticks.
  2. Anulación de Físicas (MixinEntity.java):
    • move(MoverType, Vec3): @Inject(at = @At("HEAD")) guarda originalNoPhysics y establece entity.noPhysics = true.
    • move(MoverType, Vec3): @Inject(at = @At("RETURN")) restaura entity.noPhysics = originalNoPhysics.
  3. Prevención de Empuje: @Inject(method = "moveTowardsClosestSpace", at = @At("HEAD"), cancellable = true) bloquea las fuerzas de eyección de bloques de vanilla.
  4. Cancelación de Gravedad en Pared: @Inject(method = "applyGravity", at = @At("HEAD"), cancellable = true) cancela la gravedad únicamente cuando el objeto se encuentra físicamente dentro de un vóxel de bloque.

⚙️ Configuración y GameRules Pertinentes

GameRuleTipoPor DefectoDescripción
ig:magnet_enabledBooleanotrueInterruptor maestro para las mecánicas de atracción.
ig:magnet_rangeEntero12Radio de atracción en bloques (1 a 64).
ig:magnet_speedEntero80Porcentaje de velocidad terminal ($80 = 0.8\text{ b/t}$).
ig:magnet_accelerationEntero10Porcentaje del factor de aceleración ($10 = 10%\text{ lerp/tick}$).
ig:magnet_noclipBooleanotrueHabilita el cambio de fase a través de bloques al atraer.

🔗 Documentación Relacionada de la Wiki

Official documentation & web portal for Dasik Igaijinn mods.