Skip to content

⚡ Режим мгновенного подбора (MC 26.2)

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

Инфоблок механикиТехнические параметры
Системный классnet.instantgratification.magnet.mixin.PlayerMixin
Включающее правило GameRuleig:magnet_instant (По умолчанию: false)
Радиус действия GameRuleig:magnet_range (По умолчанию: 12, Диапазон: 1..64)
Точка инъекции@ModifyVariable(method = "aiStep", at = @At("STORE"), ordinal = 0)
Целевая переменнаяХитбокс подбора игрока (AABB pickupArea)
Логика инвентаря100% ванильный конвейер Player.touch(ItemEntity)

📖 Обзор мгновенного подбора

В то время как стандартный режим вакуума физически перемещает предметы по воздуху с помощью интерполяции скорости, Режим мгновенного подбора полностью устраняет время полета. Когда он включен, выпавшие предметы в радиусе действия попадают в инвентарь игрока в ту же микросекунду, как только появляются.

Вместо опасных и подверженных сбоям самодельных алгоритмов вставки в инвентарь, Magnet, Let me get that! реализует мгновенный подбор путем безопасного расширения стандартного ванильного хитбокса сбора игрока внутри метода aiStep().

+-----------------------------------------------------------------------------------+
|                            ВАНИЛЬНЫЙ ТИК ИГРОКА aiStep()                          |
+-----------------------------------------------------------------------------------+
                                          |
                                          v
                +---------------------------------------------------+
                |   PlayerMixin.ig_magnet$expandPickupArea()        |
                |   pickupArea = pickupArea.inflate(range);         |
                +---------------------------------------------------+
                                          |
                                          v
+-----------------------------------------------------------------------------------+
|               ВАНИЛЬНОЕ ВЫПОЛНЕНИЕ ItemEntity.playerTouch(Player)                 |
|   - Ванильное объединение стаков и частичный подбор                               |
|   - Ванильные анимации и звуки сбора (item.pickup / entity.experience_orb)        |
|   - Корректные триггеры статистики и достижений                                   |
|   - Полная обработка переполнения инвентаря и сохранение остатка                  |
+-----------------------------------------------------------------------------------+

🧩 Архитектурная реализация (PlayerMixin.java)

java
@ModifyVariable(
        method = "aiStep",
        at = @At(value = "STORE"),
        ordinal = 0
)
private AABB ig_magnet$expandPickupArea(AABB pickupArea) {
    Player player = (Player) (Object) this;
    if (!this.ig_magnet$isMagnetEnabled() || player.isDeadOrDying() || player.isSpectator()) {
        return pickupArea;
    }

    Level level = player.level();
    if (!level.isClientSide()) {
        if (ModGameRules.getBoolean(level, ModGameRules.MAGNET_ENABLED) && ModGameRules.getBoolean(level, ModGameRules.MAGNET_INSTANT)) {
            int range = ModGameRules.getInt(level, ModGameRules.MAGNET_RANGE);
            if (range > 0) {
                return pickupArea.inflate(range);
            }
        }
    }
    return pickupArea;
}

Ключевые инженерные гарантии:

  1. Проверки безопасности: Если игрок мертв или погибает (player.isDeadOrDying()), находится в режиме наблюдателя (player.isSpectator()) или отключил личный магнит (!isMagnetEnabled()), область подбора никогда не увеличивается.
  2. Серверный авторитет: Логика подбора выполняется строго на логическом сервере (!level.isClientSide()), исключая появление предметов-призраков и рассинхронизацию инвентаря.
  3. Отсутствие конфликта движения: Когда ig:magnet_instant равно true, метод MagnetMovement.pull() автоматически прерывает обновление скоростей, поэтому физика и мгновенный подбор не конфликтуют между собой.

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

GameRuleТипПо умолчаниюОписание
ig:magnet_instantBooleanfalseВключает мгновенную телепортацию в инвентарь вместо полета.
ig:magnet_rangeInteger12Радиус (в блоках), на который увеличивается хитбокс подбора AABB.
ig:magnet_enabledBooleantrueГлавный переключатель всего мода.

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

Official documentation & web portal for Dasik Igaijinn mods.