✨ Притягивание сфер опыта (MC 26.1.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 (По умолчанию: 5) |
📖 Механика вакуума сфер опыта
В философии Instant Gratification оставлять сферы опыта без присмотра противоречит комфортному игровому процессу. В Minecraft 26.1.2 сущности ExperienceOrb притягиваются с точно такой же скоростью и физикой фазового сдвига, как и выброшенные предметы.
+------------------+ getEntitiesOfClass +-----------------------+ MagnetMovement.pull +--------------------+
| Область AABB | -------------------------> | Список ExperienceOrb | --------------------------> | Сбор игроком |
+------------------+ +-----------------------+ +--------------------+
|
v
[Применить фазовый сдвиг]
[Применить вектор Lerp]
[Ограниченные искры частиц]⚡ Синхронизированная физика и фазовый сдвиг
- Фазовый сдвиг (NoClip): Сферы опыта проходят сквозь твердые блоки, что предотвращает их застревание за стенами или в углах потолка.
- Интерполяция скорости: Сферы плавно ускоряются по направлению к глазам игрока с учетом настроенных процентов скорости и ускорения.
- Фильтрация видимости (LOS): Если параметр
ig:magnet_los_onlyвключен, сферы опыта должны быть видны игроку либо обладать активным импульсом намагничивания.
🛡️ Защита от лагов и пул частиц
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$ сущностей за тик испускают визуальные шлейфы.
- Безопасное переключение на клиенте: В
MagnetMovement.java, если мир не являетсяServerLevel, частицы корректно направляются черезlevel.addParticle(...).
⚙️ Связанные настройки и игровые правила (GameRules)
| GameRule | Тип | По умолчанию | Описание |
|---|---|---|---|
ig:magnet_affects_xp | Boolean | true | Притягивает ли магнит сферы опыта. |
ig:magnet_particles | Boolean | true | Главный переключатель визуальных эффектов частиц. |
ig:magnet_particle_count | Integer | 1 | Количество искр на сущность за тик генерации частиц. |
ig:magnet_max_particle_sources | Integer | 5 | Максимум сущностей, испускающих частицы одновременно. |
