✨ Притягивание сфер опыта (MC 26.2)
📌 Отказ от ответственности за исходный код репозитория: Документация в этой Wiki отражает текущее состояние исходного кода в репозитории, которое может включать недавние невыпущенные коммиты или функции в разработке до публичных релизов на CurseForge и Modrinth.
| Инфоблок механики | Технические параметры |
|---|---|
| Целевой класс сущности | net.minecraft.world.entity.ExperienceOrb |
| Класс менеджера | net.instantgratification.magnet.MagnetManager |
| Включающее правило GameRule | ig: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 все сферы опыта в радиусе действия наследуют ту же механику, что и выброшенные предметы:
- Фазовый сдвиг (NoClip): Сферы опыта проходят сквозь твердые блоки, что исключает их бесконечное кружение или отскакивание от стен.
- Динамическое ускорение: Сферы опыта используют те же формулы скорости ($s = \text{speed}/100.0$) и ускорения ($a = \text{accel}/100.0$).
- Фильтрация линии обзора: Если включено правило
ig:magnet_los_only, сферы опыта должны пройти проверку круговой видимости 360° и вторичные проверки препятствий.
🛡️ Производительность и защита от лагов (Лимит частиц)
Плотные фермы мобов или битвы с Драконом Края могут создавать сотни сфер опыта одновременно. Появление частиц у каждой сферы на каждом тике могло бы вызвать падение FPS на клиенте.
Мод предотвращает лаги благодаря Глобальному ограничению источников частиц:
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_xp | Boolean | true | true/false | Притягиваются ли сферы опыта магнитом. |
ig:magnet_particles | Boolean | true | true/false | Главный переключатель визуальных искр частиц. |
ig:magnet_particle_count | Integer | 1 | 0..100 | Количество частиц искр на каждый активный источник. |
ig:magnet_max_particle_sources | Integer | 5 | 0..100 | Максимум одновременных сущностей с частицами. |
