Class MissileTrackBroadcaster

java.lang.Object
com.hbm_m.server.missile.MissileTrackBroadcaster

public final class MissileTrackBroadcaster extends Object
Sends authoritative missile poses to every player in the same dimension, independent of vanilla entity tracking / client chunk loading.
  • Method Details

    • register

      public static void register()
    • onMissileSpawned

      public static void onMissileSpawned(MissileBaseEntity missile)
    • getActiveMissiles

      public static Set<MissileBaseEntity> getActiveMissiles(net.minecraft.server.level.ServerLevel level)
      Все активные ракеты в измерении, НЕ привязанные к загрузке чанков (порт глобального реестра IRadarDetectableNT из 1.7.10). Используется радаром для обнаружения ракет в незагруженных чанках.
    • isDuplicateSpawn

      public static boolean isDuplicateSpawn(net.minecraft.server.level.ServerLevel level, MissileBaseEntity missile)
      Детект «призрака» от PersistentEntitySectionManager: в наборе уже есть другая живая MissileBaseEntity с тем же UUID, что и у missile, в том же уровне.

      Сущности, которые сами форсируют загрузку чанков (region‑тикет в MissileBaseEntity.onAddedToWorld()), изредка ре‑десериализуются из устаревшего entity‑chunk при полёте вдали от игрока — копия наследует UUID оригинала (загрузка с диска обходит UUID‑проверку PESM). Без этой проверки в воздухе появляется вторая (иногда третья) реальная ракета и второй контакт на радаре.

      Условие other.level() == level принципиально: при перезаходе в мир в наборе могут оставаться «осиротевшие» ссылки со старым уровнем — их нужно игнорировать, иначе легитимная восстановленная ракета будет ложно отброшена.

    • onMissileRemoved

      public static void onMissileRemoved(MissileBaseEntity missile)
    • broadcastPoseForMissile

      public static void broadcastPoseForMissile(MissileBaseEntity missile)
      Called from MissileBaseEntity.tick() so poses are sent even when vanilla entity sync stalls in unloaded chunk sections.