summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/misc
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2024-01-17 21:59:35 +0100
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2024-01-17 21:59:35 +0100
commit9929b1b60f22a087369d7a8560d5388f8168872c (patch)
treed48bc8db633222fe9a3d3c213a5f4d63be75cc14 /src/main/java/at/hannibal2/skyhanni/features/misc
parentc1586dec2e458388b8b669995bcac8a9bdafba95 (diff)
downloadskyhanni-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.kt58
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
+}