Skip to content

🧲 Movimento de Vácuo & Deslocamento de Fase (MC 26.1.2)

📌 Aviso sobre o Código-Fonte do Repositório: A documentação nesta Wiki reflete o estado atual do código-fonte no repositório, que pode incluir commits recentes ainda não lançados ou recursos em desenvolvimento antes das compilações públicas oficiais no CurseForge e Modrinth.

Infobox do RecursoParâmetros Técnicos
Classe do Sistemanet.instantgratification.magnet.MagnetMovement
Evento de DisparoTick do Jogador no Servidor (PlayerMixin $\rightarrow$ MagnetManager.tick)
Alcance Padrão de Puxar12 blocos (ig:magnet_range)
Velocidade Terminal Padrão80% ($0.8\text{ blocos/tick} = 16.0\text{ m/s}$)
Aceleração Padrão10% (fator lerp de $0.10\text{/tick}$)
Deslocamento de Fase (NoClip)Habilitado (ig:magnet_noclip = true)
Vetor AlvoPosição dos Olhos do Jogador (player.getEyePosition())
Impulso de Deslocamento do Solo$+0.05\text{ m}$ no eixo Y quando entity.onGround()

📖 Visão Geral do Sistema

No Minecraft 26.1.2, o mecanismo de vácuo rastreia continuamente instâncias válidas de ItemEntity dentro do raio esférico do jogador e as puxa diretamente para o nível dos olhos utilizando interpolação lerp.

Com o Deslocamento de Fase (NoClip) ativo, os itens atravessam paredes e blocos sólidos suavemente, evitando que os drops fiquem presos atrás de obstáculos durante a mineração ou combate.

+------------------+     Linha de Visão OK     +----------------------+     Velocidade Lerp Aplicada     +------------------------+
| Entidade de Item | ------------------------> | Ativar NoClip (2 Tk) | -------------------------------> | Posição Olhos Jogador  |
+------------------+                            +----------------------+                                 +------------------------+
                                                           |
                                                           v
                                                [Cancelar Empurrão Parede]
                                                [Ignorar Colisão de Bloco]
                                                [Cancelar Gravidade Parede]

🧮 Física & Matemática Vetorial

1. Vetor Unitário Direcional

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

2. Interpolação de Velocidade

$$\text{Escalar de Velocidade } s = \frac{\text{GameRule}(\text{ig:magnet_speed})}{100.0} = 0.8\text{ blocos/tick}$$ $$\vec{u}{\text{target}} = \hat{d} \times s$$ $$\text{Fator de Aceleração } 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 Anti-Atrito com o Solo

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

🧱 Deslocamento de Fase (Mecanismo NoClip)

  1. Ativação do Estado: ((IMagnetEntity) entity).ig$setMagnetNoClip() ativa uma contagem regressiva de 2 ticks.
  2. Substituição da Física (MixinEntity.java):
    • move(MoverType, Vec3): @Inject(at = @At("HEAD")) armazena em cache originalNoPhysics e define entity.noPhysics = true.
    • move(MoverType, Vec3): @Inject(at = @At("RETURN")) restaura entity.noPhysics = originalNoPhysics.
  3. Prevenção de Empurrão para Fora: @Inject(method = "moveTowardsClosestSpace", at = @At("HEAD"), cancellable = true) bloqueia as forças nativas de ejeção de paredes do vanilla.
  4. Cancelamento de Gravidade em Parede: @Inject(method = "applyGravity", at = @At("HEAD"), cancellable = true) cancela a gravidade apenas quando o item está fisicamente dentro do voxel de um bloco.

⚙️ Configurações Relevantes & GameRules

GameRuleTipoPadrãoDescrição
ig:magnet_enabledBooleantrueAlternância principal para as mecânicas de vácuo.
ig:magnet_rangeInteger12Raio do vácuo em blocos (1 a 64).
ig:magnet_speedInteger80Porcentagem da velocidade terminal ($80 = 0.8\text{ b/t}$).
ig:magnet_accelerationInteger10Porcentagem do fator de aceleração ($10 = 10%\text{ lerp/tick}$).
ig:magnet_noclipBooleantrueHabilita o deslocamento de fase através de blocos durante a atração.

🔗 Documentação da Wiki Relacionada

Official documentation & web portal for Dasik Igaijinn mods.