From 9929b1b60f22a087369d7a8560d5388f8168872c Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 17 Jan 2024 21:59:35 +0100 Subject: Fixing Ghost Entities. --- .../skyhanni/features/misc/FixGhostEntities.kt | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/misc/FixGhostEntities.kt (limited to 'src/main/java/at/hannibal2/skyhanni/features/misc') 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() + + @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 +} -- cgit