Package com.hbm_m.server.missile
Class MissileTrackBroadcaster
java.lang.Object
com.hbm_m.server.missile.MissileTrackBroadcaster
Sends authoritative missile poses to every player in the same dimension,
independent of vanilla entity tracking / client chunk loading.
-
Method Summary
Modifier and TypeMethodDescriptionstatic voidbroadcastPoseForMissile(MissileBaseEntity missile) Called fromMissileBaseEntity.tick()so poses are sent even when vanilla entity sync stalls in unloaded chunk sections.static Set<MissileBaseEntity>getActiveMissiles(net.minecraft.server.level.ServerLevel level) Все активные ракеты в измерении, НЕ привязанные к загрузке чанков (порт глобального реестра IRadarDetectableNT из 1.7.10).static booleanisDuplicateSpawn(net.minecraft.server.level.ServerLevel level, MissileBaseEntity missile) Детект «призрака» отPersistentEntitySectionManager: в наборе уже есть другая живаяMissileBaseEntityс тем же UUID, что и уmissile, в том же уровне.static voidonMissileRemoved(MissileBaseEntity missile) static voidonMissileSpawned(MissileBaseEntity missile) static voidregister()
-
Method Details
-
register
public static void register() -
onMissileSpawned
-
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
-
broadcastPoseForMissile
Called fromMissileBaseEntity.tick()so poses are sent even when vanilla entity sync stalls in unloaded chunk sections.
-