Skip to content

👁️ Ligne de Visée & Mécaniques d'Obstacle (MC 26.1.2)

📌 Avertissement sur le Code Source du Dépôt : La documentation de ce Wiki reflète l'état actuel du code source dans le dépôt, qui peut inclure des commits récents non publiés ou des fonctionnalités en développement avant les versions publiques sur CurseForge et Modrinth.

Encadré TechniqueParamètres Techniques
Moteur de Vision Primairenet.dasik.social.api.vision.PlayerVisionTracker
Moteur de Vision Secondairenet.instantgratification.magnet.SecondaryVisionCheck
Champ de Vision Sphérique$360.0^\circ$ (Perception omnidirectionnelle intégrale)
Tolérance de ContactSeuil de contact cible de $0.3\text{ m}$
Balise de Rétention Mémorielleig$isMagnetized() / ig$setMagnetized()
Règle d'Élanig:magnet_keep_moving_if_unseen = true
Implémentation du ContexteRecord statique VisionContext

📖 Pipeline de Vision à Double Passe

Dans Minecraft 26.1.2, la ligne de visée est évaluée via un Pipeline de Vision à Double Passe optimisé et sans allocation mémoire superflue :

                                +---------------------------+
                                |    OBJET CIBLE DÉTECTÉ    |
                                +-------------+-------------+
                                              |
                                              v
                              +-------------------------------+
                              |    PASSE PRIMAIRE (360° LOS)  |
                              |   PlayerVisionTracker.canSee  |
                              +---------------+---------------+
                                              |
                        +---------------------+---------------------+
                        |                                           |
                    [VISIBLE]                                   [OBSTRUÉ]
                        |                                           |
                        v                                           v
      +-----------------------------------+               +--------------------+
      |    PASSE SECONDAIRE (GRANULAIRE)  |               |  TEST CONTINUITÉ   |
      |     SecondaryVisionCheck.canSee   |               | keepMovingIfUnseen |
      +-----------------+-----------------+               +---------+----------+
                        |                                           |
            +-----------+-----------+                     +---------+---------+
            |                       |                     |                   |
        [SUCCÈS]                 [BLOQUÉ]             [MAGNÉTISÉ]       [NON MAGNÉTISÉ]
            |                       |                     |                   |
            v                       v                     v                   v
    +---------------+       +---------------+     +---------------+   +---------------+
    | ATTIRE OBJET  |       | REJETER/ARRÊT |     | CONTINUE VOL  |   | REJET VOL     |
    |  & MAGNÉTISE  |       +---------------+     +---------------+   +---------------+
    +---------------+

🔍 Passe 1 : Vérification de Ligne de Visée Sphérique Primaire à 360°

java
boolean canSee = net.dasik.social.api.vision.PlayerVisionTracker.canSee(player, entity, (double) range, 360.0);
  • Champ Omnidirectionnel : Avec un angle de champ de vision de $360^\circ$, les objets lâchés au-dessus, au-dessous ou derrière le joueur sont attirés de manière fluide sans forcer de rotation de caméra.
  • Tolérance Sub-Voxel : La marge de $0.3\text{m}$ évite les faux rejets lorsque les objets reposent à fleur de mur solide.

🌿 Passe 2 : Traversée Granulaire des Blocs (SecondaryVisionCheck)

java
private record VisionContext(
        Level level,
        boolean blockTransparent,
        boolean blockFlora,
        boolean blockEntities,
        CollisionContext collisionContext,
        Vec3 start,
        Vec3 end
) {}
  • Flore (ig:magnet_blocked_by_flora) : Vérifie la présence de BushBlock et LeavesBlock.
  • Entités de Bloc (ig:magnet_blocked_by_block_entities) : Vérifie state.hasBlockEntity() (Coffres, Boîtes de Shulker, Lits).
  • Blocs Transparents (ig:magnet_blocked_by_transparent) : Teste state.getVisualShape().clip(...) contre le Verre, les Vitres et les Dalles.

🚀 Continuité de l'Élan (keepMovingIfUnseen)

  • Dès la première détection, ((IMagnetEntity) entity).ig$setMagnetized() balise l'entité.
  • Si ig:magnet_keep_moving_if_unseen = true, l'objet continue d'être attiré même en contournant des obstacles, tant qu'il a été préalablement magnétisé.

⚙️ Configuration & GameRules Pertinentes

GameRuleTypeValeur par DéfautDescription
ig:magnet_los_onlyBooléentrueExige une visibilité directe pour attirer les objets.
ig:magnet_keep_moving_if_unseenBooléentruePoursuit l'attraction si la vue est coupée pendant le vol.
ig:magnet_blocked_by_transparentBooléenfalseSi true, le verre et les blocs transparents bloquent la visibilité.
ig:magnet_blocked_by_floraBooléenfalseSi true, l'herbe et les fleurs bloquent la visibilité.
ig:magnet_blocked_by_block_entitiesBooléenfalseSi true, les coffres et entités de bloc bloquent la visibilité.

🔗 Documentation Connexe

Official documentation & web portal for Dasik Igaijinn mods.