Skip to content

✨ Притягивание сфер опыта (MC 26.2)

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

Инфоблок механикиТехнические параметры
Целевой класс сущностиnet.minecraft.world.entity.ExperienceOrb
Класс менеджераnet.instantgratification.magnet.MagnetManager
Включающее правило GameRuleig:magnet_affects_xp (По умолчанию: true)
Запрос сканированияplayer.level().getEntitiesOfClass(ExperienceOrb.class, area, Entity::isAlive)
Тип частицParticleTypes.ELECTRIC_SPARK
Ограничение источников частицОбщее с предметами через ig:magnet_max_particle_sources

📖 Механика вакуума сфер опыта

В рамках философии Instant Gratification брошенные на земле или застрявшие на потолке пещеры сферы опыта нарушают плавность игры. Magnet, Let me get that! обеспечивает первоклассную поддержку притягивания сущностей ExperienceOrb наряду с выброшенными предметами.

+------------------+     getEntitiesOfClass     +-----------------------+     MagnetMovement.pull     +--------------------+
| Область AABB     | -------------------------> | Список ExperienceOrb  | --------------------------> | Сбор игроком       |
+------------------+                            +-----------------------+                             +--------------------+
                                                             |
                                                             v
                                                [Применить фазовый сдвиг]
                                                [Применить вектор Lerp]
                                                [Ограниченные искры частиц]

⚡ Синхронизированная физика и фазовый сдвиг

При включенном правиле ig:magnet_affects_xp все сферы опыта в радиусе действия наследуют ту же механику, что и выброшенные предметы:

  1. Фазовый сдвиг (NoClip): Сферы опыта проходят сквозь твердые блоки, что исключает их бесконечное кружение или отскакивание от стен.
  2. Динамическое ускорение: Сферы опыта используют те же формулы скорости ($s = \text{speed}/100.0$) и ускорения ($a = \text{accel}/100.0$).
  3. Фильтрация линии обзора: Если включено правило ig:magnet_los_only, сферы опыта должны пройти проверку круговой видимости 360° и вторичные проверки препятствий.

🛡️ Производительность и защита от лагов (Лимит частиц)

Плотные фермы мобов или битвы с Драконом Края могут создавать сотни сфер опыта одновременно. Появление частиц у каждой сферы на каждом тике могло бы вызвать падение FPS на клиенте.

Мод предотвращает лаги благодаря Глобальному ограничению источников частиц:

java
int maxParticleSources = ModGameRules.getInt(player.level(), ModGameRules.MAGNET_MAX_PARTICLE_SOURCES);
int particleSourceCount = 0;

for (ExperienceOrb orb : orbs) {
    boolean shouldSpawnParticles = false;
    if (particleSourceCount < maxParticleSources) {
        shouldSpawnParticles = true;
        particleSourceCount++;
    }
    MagnetMovement.pull(orb, player, shouldSpawnParticles);
}
  • Глобальный лимит: Только первые $N$ сущностей (настраивается параметром ig:magnet_max_particle_sources, по умолчанию: 5) могут испускать искры на каждом конкретном тике.
  • Смещение по тикам: Частицы испускаются только когда (entity.tickCount + entity.getId()) % 4 == 0 (каждые 4 тика = 5 раз в секунду).

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

GameRuleТипПо умолчаниюДиапазон / ЕдиницыОписание
ig:magnet_affects_xpBooleantruetrue/falseПритягиваются ли сферы опыта магнитом.
ig:magnet_particlesBooleantruetrue/falseГлавный переключатель визуальных искр частиц.
ig:magnet_particle_countInteger10..100Количество частиц искр на каждый активный источник.
ig:magnet_max_particle_sourcesInteger50..100Максимум одновременных сущностей с частицами.

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

Official documentation & web portal for Dasik Igaijinn mods.