Skip to content

Commit aede6c7

Browse files
Doogie13Avanatiker
andauthored
Added Criticals -> Edit mode (#442)
* Added Criticals -> Edit mode for 2b2t * Cleanup Co-authored-by: Constructor <[email protected]>
1 parent c6cc08b commit aede6c7

File tree

7 files changed

+102
-21
lines changed

7 files changed

+102
-21
lines changed

src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketPlayer.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,13 @@ public interface AccessorCPacketPlayer {
2828
@Accessor("moving")
2929
boolean getMoving();
3030

31+
@Accessor("moving")
32+
void setMoving(boolean value);
33+
3134
@Accessor("rotating")
3235
boolean getRotating();
3336

37+
@Accessor("rotating")
38+
void setRotating(boolean value);
39+
3440
}

src/main/java/com/lambda/mixin/accessor/player/AccessorEntityPlayerSP.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,7 @@ public interface AccessorEntityPlayerSP {
1010
@Accessor("handActive")
1111
void kbSetHandActive(boolean value);
1212

13+
@Accessor("lastReportedPosY")
14+
void lcSetLastReportedPosY(double value);
15+
1316
}

src/main/java/com/lambda/mixin/player/MixinEntityPlayerSP.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.lambda.mixin.player;
22

33
import com.lambda.client.event.LambdaEventBus;
4+
import com.lambda.client.event.events.CriticalsUpdateWalkingEvent;
45
import com.lambda.client.event.events.OnUpdateWalkingPlayerEvent;
56
import com.lambda.client.event.events.PlayerMoveEvent;
67
import com.lambda.client.event.events.PushOutOfBlocksEvent;
@@ -150,6 +151,10 @@ private void onUpdateInvokeOnUpdateWalkingPlayer(CallbackInfo ci) {
150151

151152
@Inject(method = "onUpdateWalkingPlayer", at = @At("HEAD"), cancellable = true)
152153
private void onUpdateWalkingPlayerHead(CallbackInfo ci) {
154+
155+
CriticalsUpdateWalkingEvent criticalsEditEvent = new CriticalsUpdateWalkingEvent();
156+
LambdaEventBus.INSTANCE.post(criticalsEditEvent);
157+
153158
// Setup flags
154159
Vec3d position = new Vec3d(this.posX, this.getEntityBoundingBox().minY, this.posZ);
155160
Vec2f rotation = new Vec2f(this.rotationYaw, this.rotationPitch);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.lambda.client.event.events
2+
3+
import com.lambda.client.event.Event
4+
5+
/**
6+
* @author Doogie13
7+
* @since 20/12/2022
8+
*/
9+
class CriticalsUpdateWalkingEvent : Event

src/main/kotlin/com/lambda/client/event/events/OnUpdateWalkingPlayerEvent.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ class OnUpdateWalkingPlayerEvent private constructor(
2222

2323
var moving = moving
2424
@JvmName("isMoving") get
25-
private set
2625

2726
var rotating = rotating
2827
@JvmName("isRotating") get

src/main/kotlin/com/lambda/client/mixin/extension/Network.kt

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,33 +23,48 @@ var CPacketPlayer.playerX: Double
2323
set(value) {
2424
(this as AccessorCPacketPlayer).setX(value)
2525
}
26+
2627
var CPacketPlayer.playerY: Double
2728
get() = this.getY(0.0)
2829
set(value) {
2930
(this as AccessorCPacketPlayer).setY(value)
3031
}
32+
3133
var CPacketPlayer.playerZ: Double
3234
get() = this.getZ(0.0)
3335
set(value) {
3436
(this as AccessorCPacketPlayer).setZ(value)
3537
}
38+
3639
var CPacketPlayer.playerYaw: Float
3740
get() = this.getYaw(0.0f)
3841
set(value) {
3942
(this as AccessorCPacketPlayer).setYaw(value)
4043
}
44+
4145
var CPacketPlayer.playerPitch: Float
4246
get() = this.getPitch(0.0f)
4347
set(value) {
4448
(this as AccessorCPacketPlayer).setPitch(value)
4549
}
50+
4651
var CPacketPlayer.playerIsOnGround: Boolean
4752
get() = this.isOnGround
4853
set(value) {
4954
(this as AccessorCPacketPlayer).setOnGround(value)
5055
}
51-
val CPacketPlayer.playerMoving: Boolean get() = (this as AccessorCPacketPlayer).moving
52-
val CPacketPlayer.playerRotating: Boolean get() = (this as AccessorCPacketPlayer).rotating
56+
57+
var CPacketPlayer.playerMoving: Boolean
58+
get() = (this as AccessorCPacketPlayer).moving
59+
set(value) {
60+
(this as AccessorCPacketPlayer).moving = value
61+
}
62+
63+
var CPacketPlayer.playerRotating: Boolean
64+
get() = (this as AccessorCPacketPlayer).rotating
65+
set(value) {
66+
(this as AccessorCPacketPlayer).rotating = value
67+
}
5368

5469
var CPacketUseEntity.useEntityId: Int
5570
get() = (this as AccessorCPacketUseEntity).id
@@ -74,11 +89,13 @@ var SPacketEntityVelocity.entityVelocityMotionX: Int
7489
set(value) {
7590
(this as AccessorSPacketEntityVelocity).setMotionX(value)
7691
}
92+
7793
var SPacketEntityVelocity.entityVelocityMotionY: Int
7894
get() = this.motionY
7995
set(value) {
8096
(this as AccessorSPacketEntityVelocity).setMotionY(value)
8197
}
98+
8299
var SPacketEntityVelocity.entityVelocityMotionZ: Int
83100
get() = this.motionZ
84101
set(value) {
@@ -90,11 +107,13 @@ var SPacketExplosion.explosionMotionX: Float
90107
set(value) {
91108
(this as AccessorSPacketExplosion).setMotionX(value)
92109
}
110+
93111
var SPacketExplosion.explosionMotionY: Float
94112
get() = this.motionY
95113
set(value) {
96114
(this as AccessorSPacketExplosion).setMotionY(value)
97115
}
116+
98117
var SPacketExplosion.explosionMotionZ: Float
99118
get() = this.motionZ
100119
set(value) {
@@ -106,6 +125,7 @@ var SPacketPlayerPosLook.playerPosLookYaw: Float
106125
set(value) {
107126
(this as AccessorSPacketPosLook).setYaw(value)
108127
}
128+
109129
var SPacketPlayerPosLook.playerPosLookPitch: Float
110130
get() = this.pitch
111131
set(value) {

src/main/kotlin/com/lambda/client/module/modules/combat/Criticals.kt

Lines changed: 57 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@ package com.lambda.client.module.modules.combat
22

33
import com.lambda.client.commons.interfaces.DisplayEnum
44
import com.lambda.client.event.SafeClientEvent
5+
import com.lambda.client.event.events.CriticalsUpdateWalkingEvent
56
import com.lambda.client.event.events.PacketEvent
67
import com.lambda.client.event.events.PlayerAttackEvent
7-
import com.lambda.client.event.listener.listener
88
import com.lambda.client.mixin.extension.isInWeb
9+
import com.lambda.client.mixin.extension.playerIsOnGround
10+
import com.lambda.client.mixin.extension.playerMoving
11+
import com.lambda.client.mixin.extension.playerY
912
import com.lambda.client.module.Category
1013
import com.lambda.client.module.Module
1114
import com.lambda.client.util.EntityUtils.isInOrAboveLiquid
1215
import com.lambda.client.util.threads.safeListener
16+
import com.lambda.mixin.accessor.player.AccessorEntityPlayerSP
1317
import net.minecraft.entity.Entity
1418
import net.minecraft.entity.EntityLivingBase
1519
import net.minecraft.init.MobEffects
@@ -25,19 +29,20 @@ object Criticals : Module(
2529
description = "Always do critical attacks",
2630
category = Category.COMBAT
2731
) {
28-
private val mode by setting("Mode", Mode.PACKET)
32+
private val mode by setting("Mode", Mode.EDIT)
2933
private val jumpMotion by setting("Jump Motion", 0.25, 0.1..0.5, 0.01, { mode == Mode.MINI_JUMP }, fineStep = 0.001)
30-
private val attackFallDistance by setting("Attack Fall Distance", 0.1, 0.05..1.0, 0.05, { mode != Mode.PACKET })
34+
private val attackFallDistance by setting("Attack Fall Distance", 0.1, 0.05..1.0, 0.05, { mode == Mode.MINI_JUMP || mode == Mode.JUMP })
3135

3236
private enum class Mode(override val displayName: String) : DisplayEnum {
3337
PACKET("Packet"),
38+
EDIT("Edit"),
3439
JUMP("Jump"),
3540
MINI_JUMP("Mini Jump")
3641
}
3742

3843
private var delayTick = -1
3944
private var target: Entity? = null
40-
private var attacking = false
45+
private var spoofedY = -1337.0
4146

4247
override fun isActive(): Boolean {
4348
return isEnabled && !delaying()
@@ -52,47 +57,81 @@ object Criticals : Module(
5257
reset()
5358
}
5459

55-
listener<PacketEvent.Send> {
56-
if (it.packet is CPacketAnimation && mode != Mode.PACKET && delayTick > -1) {
60+
safeListener<CriticalsUpdateWalkingEvent> {
61+
if (mode != Mode.EDIT) return@safeListener
62+
63+
// we need to ensure we are always sending packets as not to flag NCP for fight.critical
64+
(player as AccessorEntityPlayerSP).lcSetLastReportedPosY(-1337.0)
65+
}
66+
67+
safeListener<PacketEvent.Send> {
68+
if (it.packet is CPacketAnimation
69+
&& mode != Mode.PACKET
70+
&& delayTick > -1
71+
) {
5772
it.cancel()
73+
return@safeListener
74+
}
75+
76+
if (it.packet is CPacketPlayer
77+
&& mode == Mode.EDIT
78+
) {
79+
// the advantage of this is that it doesn't delay anything and doesn't send extra packets
80+
if (player.onGround) {
81+
if (spoofedY <= 0) {
82+
spoofedY = .01
83+
} else {
84+
spoofedY -= .00001
85+
}
86+
} else spoofedY = -1337.0
87+
88+
it.packet.playerMoving = true
89+
it.packet.playerIsOnGround = false
90+
91+
if (spoofedY >= 0) {
92+
it.packet.playerY += spoofedY
93+
}
5894
}
5995
}
6096

6197
safeListener<PlayerAttackEvent>(0) {
62-
if (it.cancelled || attacking || it.entity !is EntityLivingBase || !canDoCriticals(true)) return@safeListener
98+
if (it.cancelled|| it.entity !is EntityLivingBase || !canDoCriticals(true)) return@safeListener
6399

64100
val cooldownReady = player.onGround && player.getCooledAttackStrength(0.5f) > 0.9f
65101

66102
when (mode) {
67103
Mode.PACKET -> {
68-
if (cooldownReady) {
69-
connection.sendPacket(CPacketPlayer.Position(player.posX, player.posY + 0.1, player.posZ, false))
70-
connection.sendPacket(CPacketPlayer.Position(player.posX, player.posY, player.posZ, false))
71-
}
104+
if (!cooldownReady) return@safeListener
105+
106+
connection.sendPacket(CPacketPlayer.Position(player.posX, player.posY + 0.1, player.posZ, false))
107+
connection.sendPacket(CPacketPlayer.Position(player.posX, player.posY, player.posZ, false))
72108
}
73109
Mode.JUMP -> {
74110
jumpAndCancel(it, cooldownReady, null)
75111
}
76112
Mode.MINI_JUMP -> {
77113
jumpAndCancel(it, cooldownReady, jumpMotion)
78114
}
115+
else -> { }
79116
}
80117
}
81118

82119
safeListener<TickEvent.ClientTickEvent> { event ->
83-
if (event.phase != TickEvent.Phase.END || mode == Mode.PACKET || delayTick <= -1) return@safeListener
120+
if (event.phase != TickEvent.Phase.END
121+
|| mode == Mode.PACKET
122+
|| delayTick <= -1
123+
) return@safeListener
84124

85125
delayTick--
86126

87-
if (target != null && player.fallDistance >= attackFallDistance && canDoCriticals(!player.onGround)) {
88-
val target = target
89-
reset()
127+
target?.let{ target ->
128+
if (player.fallDistance >= attackFallDistance
129+
&& canDoCriticals(!player.onGround)
130+
) {
131+
reset()
90132

91-
if (target != null) {
92-
attacking = true
93133
connection.sendPacket(CPacketUseEntity(target))
94134
connection.sendPacket(CPacketAnimation(EnumHand.MAIN_HAND))
95-
attacking = false
96135
}
97136
}
98137
}

0 commit comments

Comments
 (0)