1+ package com.lambda.module.modules.movement
2+
3+ import com.lambda.event.events.PacketEvent
4+ import com.lambda.event.listener.SafeListener.Companion.listener
5+ import com.lambda.module.Module
6+ import com.lambda.module.tag.ModuleTag
7+ import com.lambda.threading.runSafe
8+ import com.lambda.util.Communication.info
9+ import net.minecraft.entity.projectile.FireworkRocketEntity
10+ import net.minecraft.network.packet.c2s.common.CommonPongC2SPacket
11+ import net.minecraft.network.packet.s2c.play.EntitiesDestroyS2CPacket
12+ import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket
13+
14+ object RocketExtend : Module(
15+ name = " RocketExtend" ,
16+ description = " Extends rocket length on grim" ,
17+ defaultTags = setOf(ModuleTag .MOVEMENT )
18+ ) {
19+ var extendedRockets: MutableList <FireworkRocketEntity > = mutableListOf ();
20+ var pingPacket: CommonPongC2SPacket ? = null ;
21+ init {
22+ onDisable {
23+ if (extendedRockets.isNotEmpty()) reset()
24+ }
25+ listener<PacketEvent .Receive .Pre > { event ->
26+ when (event.packet) {
27+ is EntitiesDestroyS2CPacket -> {
28+ val rockets = event.packet.entityIds.map { id ->
29+ world.getEntityById(id)
30+ }.filter { entity ->
31+ entity is FireworkRocketEntity && entity.shooter?.equals(this .player) == true
32+ }.filterNotNull().map {it as FireworkRocketEntity }
33+
34+ if (rockets.isEmpty()) return @listener
35+ extendedRockets.addAll(rockets)
36+ event.packet.entityIds.removeAll(rockets.map { it.id }.toSet())
37+
38+ this @RocketExtend.info(" RocketExtend triggered" )
39+ }
40+ is PlayerPositionLookS2CPacket -> {
41+ if (extendedRockets.isNotEmpty()) reset()
42+ }
43+ }
44+ }
45+ listener<PacketEvent .Send .Pre > { event ->
46+ when (event.packet) {
47+ is CommonPongC2SPacket -> {
48+ if (extendedRockets.isNotEmpty()) {
49+ pingPacket = event.packet
50+
51+ event.cancel()
52+ }
53+ }
54+ }
55+ }
56+ }
57+
58+ fun reset () {
59+ this @RocketExtend.info(" Reset RocketExtend" )
60+
61+ runSafe {
62+ extendedRockets.forEach { it.discard() }
63+ if (pingPacket != null ) connection.sendPacket(pingPacket)
64+ }
65+
66+ extendedRockets.clear()
67+ pingPacket = null
68+ }
69+ }
0 commit comments