diff options
| author | hannibal2 <24389977+hannibal00212@users.noreply.github.com> | 2024-01-17 21:59:35 +0100 |
|---|---|---|
| committer | hannibal2 <24389977+hannibal00212@users.noreply.github.com> | 2024-01-17 21:59:35 +0100 |
| commit | 9929b1b60f22a087369d7a8560d5388f8168872c (patch) | |
| tree | d48bc8db633222fe9a3d3c213a5f4d63be75cc14 /src/main/java/at/hannibal2/skyhanni/features/misc | |
| parent | c1586dec2e458388b8b669995bcac8a9bdafba95 (diff) | |
| download | skyhanni-9929b1b60f22a087369d7a8560d5388f8168872c.tar.gz skyhanni-9929b1b60f22a087369d7a8560d5388f8168872c.tar.bz2 skyhanni-9929b1b60f22a087369d7a8560d5388f8168872c.zip | |
Fixing Ghost Entities.
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/misc')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/misc/FixGhostEntities.kt | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/FixGhostEntities.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/FixGhostEntities.kt new file mode 100644 index 000000000..69a1c6ee6 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/FixGhostEntities.kt @@ -0,0 +1,58 @@ +package at.hannibal2.skyhanni.features.misc + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent +import at.hannibal2.skyhanni.events.PacketEvent +import at.hannibal2.skyhanni.utils.LorenzUtils +import net.minecraft.network.play.server.S0CPacketSpawnPlayer +import net.minecraft.network.play.server.S0FPacketSpawnMob +import net.minecraft.network.play.server.S13PacketDestroyEntities +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +/** + * This feature fixes ghost entities sent by hypixel that are not properly deleted in the correct order. + * E.g. Diana or Dingeon mobs or nametags. + */ +object FixGhostEntities { + + private val config get() = SkyHanniMod.feature.misc + + private var recentlyRemovedEntities = ArrayDeque<Int>() + + @SubscribeEvent + fun onWorldChange(event: LorenzWorldChangeEvent) { + recentlyRemovedEntities = ArrayDeque() + } + + @SubscribeEvent + fun onReceiveCurrentShield(event: PacketEvent.ReceiveEvent) { + if (!isEnabled()) return + + val packet = event.packet + + if (packet is S0CPacketSpawnPlayer) { + if (packet.entityID in recentlyRemovedEntities) { + event.cancel() + LorenzUtils.debug("Removed bugged hypixel mob id Player") + } + } + + if (packet is S0FPacketSpawnMob) { + if (packet.entityID in recentlyRemovedEntities) { + event.cancel() + LorenzUtils.debug("Removed bugged hypixel mob id Mob") + } + } + + if (packet is S13PacketDestroyEntities) { + for (entityID in packet.entityIDs) { + recentlyRemovedEntities.add(entityID) + if (recentlyRemovedEntities.size == 10) { + recentlyRemovedEntities.removeFirst() + } + } + } + } + + fun isEnabled() = LorenzUtils.connectedToHypixel && config.fixGhostEntities +} |
