Skip to content

👁️ Линия обзора и механика препятствий (MC 26.2)

📌 Отказ от ответственности за исходный код репозитория: Документация в этой Wiki отражает текущее состояние исходного кода в репозитории, которое может включать недавние невыпущенные коммиты или функции в разработке до публичных релизов на CurseForge и Modrinth.

Инфоблок механикиТехнические параметры
Основной движок видимостиnet.dasik.social.api.vision.PlayerVisionTracker
Вторичный движок видимостиnet.instantgratification.magnet.SecondaryVisionCheck
Сферическое поле зрения$360.0^\circ$ (Полное круговое восприятие)
Допуск дистанции контакта$0.3\text{ м}$ порог контакта с целью
Тег удержания памятиig_magnet$isMagnetized() / ig_magnet$setMagnetized()
Правило сохранения импульсаig:magnet_keep_moving_if_unseen = true
Детальные фильтрыПрозрачные блоки, Растительность, Блоки-сущности

📖 Двухпроходная архитектура видимости

Чтобы исключить нечестный сбор предметов сквозь стены пещер и базы, сохраняя при этом высокую производительность без задержек, Magnet, Let me get that! использует быстрый двухпроходный конвейер проверки видимости:

                                +---------------------------+
                                |  ЦЕЛЕВОЙ ПРЕДМЕТ ОБНАРУЖЕН|
                                +-------------+-------------+
                                              |
                                              v
                              +-------------------------------+
                              |    ПЕРВЫЙ ПРОХОД (360° LOS)   |
                              |   PlayerVisionTracker.canSee  |
                              +---------------+---------------+
                                              |
                        +---------------------+---------------------+
                        |                                           |
                   [ВИДИМ]                                     [ПРЕПЯТСТВИЕ]
                        |                                           |
                        v                                           v
      +-----------------------------------+               +--------------------+
      |     ВТОРОЙ ПРОХОД (ДЕТАЛЬНЫЙ)     |               |  ПРОВЕРКА ИМПУЛЬСА |
      |     SecondaryVisionCheck.canSee   |               | keepMovingIfUnseen |
      +-----------------+-----------------+               +---------+----------+
                        |                                           |
            +-----------+-----------+                     +---------+---------+
            |                       |                     |                   |
        [ПРОШЕЛ]               [ЗАБЛОКИРОВАН]        [НАМАГНИЧЕН]       [НЕ НАМАГНИЧЕН]
            |                       |                     |                   |
            v                       v                     v                   v
    +---------------+       +---------------+     +---------------+   +---------------+
    | ПРИТЯНУТЬ И   |       | ОТКЛОНИТЬ /   |     | ПРОДОЛЖИТЬ    |   | ОТКЛОНИТЬ     |
    | НАМАГНИТИТЬ   |       | ОСТАНОВИТЬ    |     | ПРИТЯГИВАНИЕ  |   | ПРИТЯГИВАНИЕ  |
    +---------------+       +---------------+     +---------------+   +---------------+

🔍 Проход 1: Основная круговая проверка видимости 360°

Первый проход обращается к оптимизированному движку рейкастинга DasikLibrary:

java
boolean canSee = net.dasik.social.api.vision.PlayerVisionTracker.canSee(player, entity, (double) range, 360.0);
  • Круговой угол обзора: С конусом видимости $360.0^\circ$ игрок может притягивать предметы прямо за спиной, над головой или под ногами, если между ними нет твердой стены.
  • Допуск контакта 0.3м: Когда предметы вплотную прижаты к углам блоков, субвоксельный рейкастинг с радиусом $0.3\text{м}$ исключает ложные блокировки.

🌿 Проход 2: Детальная фильтрация блоков (SecondaryVisionCheck)

Если первый проход успешен, мод вычисляет опциональные правила препятствий через BlockGetter.traverseBlocks:

java
public static boolean canSee(Player player, Entity target, boolean blockTransparent, boolean blockFlora, boolean blockEntities)
  1. Фильтрация растительности и листвы (ig:magnet_blocked_by_flora):
    • Проверяет, является ли блок экземпляром BushBlock (высокая трава, цветы, культуры, саженцы) или LeavesBlock (листва деревьев).
    • Если включено (true), растительность становится преградой для притягивания предметов.
  2. Интерактивные блоки-сущности (ig:magnet_blocked_by_block_entities):
    • Проверяет state.hasBlockEntity() по траектории луча.
    • Если включено (true), сундуки, сундуки-ловушки, бочки, шалкеровые ящики, кровати и раздатчики блокируют видимость.
  3. Прозрачные и неполные блоки (ig:magnet_blocked_by_transparent):
    • Проверяет форму state.getVisualShape(...).
    • Если включено (true), стекло, стеклянные панели, железные прутья, заборы, плиты и ступени блокируют подбор предметов.

🚀 Сохранение импульса (keepMovingIfUnseen)

В динамичном бою или при копании шахты предметы, огибающие угол, часто на мгновение пропадают из прямой видимости. Чтобы они не застревали и не падали в лаву:

  1. Метка намагничивания: Когда предмет замечен в линии обзора, метод ((IMagnetEntity) entity).ig_magnet$setMagnetized() выставляет флаг в памяти.
  2. Удержание импульса: Если на следующих тиках линия обзора теряется:
    • Если ig:magnet_keep_moving_if_unseen = true И ig_magnet$isMagnetized() == true: Предмет продолжает притягиваться к игроку.
    • Если ig:magnet_keep_moving_if_unseen = false: Притягивание немедленно прекращается при потере видимости.
    • Если предмет никогда не был виден (например, выброшен за стеной взрывом или раздатчиком): Притягивание отклоняется сразу.

⚙️ Связанные настройки и игровые правила (GameRules)

GameRuleТипПо умолчаниюОписание
ig:magnet_los_onlyBooleantrueТребует прямой видимости для притягивания предметов.
ig:magnet_keep_moving_if_unseenBooleantrueПродолжает притягивать намагниченные предметы при потере обзора в полете.
ig:magnet_blocked_by_transparentBooleanfalseЕсли true, стекло и прозрачные блоки перекрывают обзор.
ig:magnet_blocked_by_floraBooleanfalseЕсли true, трава, листва и цветы перекрывают обзор.
ig:magnet_blocked_by_block_entitiesBooleanfalseЕсли true, сундуки, кровати и блоки-сущности перекрывают обзор.

🔗 Связанная документация Вики

Official documentation & web portal for Dasik Igaijinn mods.