Skip to content

Commit cfc96c2

Browse files
committed
Refactor BetterFirework settings and some code
1 parent d852364 commit cfc96c2

File tree

1 file changed

+46
-38
lines changed

1 file changed

+46
-38
lines changed

src/main/kotlin/com/lambda/module/modules/movement/BetterFirework.kt

Lines changed: 46 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -37,74 +37,83 @@ import net.minecraft.util.hit.HitResult
3737

3838
object BetterFirework : Module(
3939
name = "BetterFirework",
40-
description = "Improves firework usage",
40+
description = "Automatic takeoff with fireworks",
4141
tag = ModuleTag.MOVEMENT,
4242
) {
43-
private var autoTakeoff by setting("Auto Takeoff", true)
44-
private var silent by setting("Silent", true)
45-
private var swing by setting("Swing ", true)
46-
private var middleClick by setting("Middle click", true)
47-
private var middleClickCancel by setting("Middle Click Cancel", false, visibility = { middleClick })
43+
private var fireworkInteract by setting("Firework Interact", true, "Automatically start flying when right clicking fireworks")
44+
private var fireworkInteractCancel by setting("Firework Interact Cancel", false, "Cancel block interactions while holding fireworks", visibility = { fireworkInteract })
45+
private var middleClick by setting("Middle Click", true, "Use firework on middle mouse click")
46+
private var middleClickCancel by setting("Middle Click Cancel", false, description = "Cancel pick block action on middle mouse click", visibility = { middleClick })
47+
private var clientSwing by setting("Swing", true, "Swing hand client side")
48+
private var silentUse by setting("Silent", true, "Silent use fireworks from the inventory", visibility = { middleClick })
4849

49-
private var state = BetterFireworkState.IDLE
5050
private var openDelay = 0
5151

5252
init {
5353
listen<TickEvent.Pre> {
54+
// Try opening the elytra after a delay after jumping
5455
if (openDelay > 0) {
5556
openDelay--
56-
if (openDelay == 0 && state == BetterFireworkState.WAIT_AIRBORNE) {
57-
state = BetterFireworkState.IDLE
58-
startFlying()
57+
if (openDelay == 0) {
58+
tryTakeoff()
5959
}
6060
}
6161
}
6262
}
6363

64-
fun onInteract(): Boolean {
65-
if (!autoTakeoff) return false
66-
64+
/**
65+
* Returns true if the mc item interaction should be canceled
66+
*/
67+
fun onInteract() =
6768
runSafe {
68-
if (player.inventory.selectedStack?.item == Items.FIREWORK_ROCKET) {
69-
if (mc.crosshairTarget != null && mc.crosshairTarget!!.type != HitResult.Type.MISS) {
70-
return false
71-
}
72-
73-
mc.itemUseCooldown += 4
74-
return startFlying()
69+
if (!fireworkInteract) return false
70+
if (player.inventory.selectedStack?.item != Items.FIREWORK_ROCKET) {
71+
return false
7572
}
76-
}
77-
return false
78-
}
73+
if (player.isGliding) {
74+
return false // No need to do special magic if we are already holding fireworks and flying
75+
}
76+
if (mc.crosshairTarget != null && mc.crosshairTarget!!.type != HitResult.Type.MISS && !fireworkInteractCancel) {
77+
return false
78+
}
79+
mc.itemUseCooldown += 4
80+
return tryTakeoff() || fireworkInteractCancel
81+
} ?: false
7982

80-
// Do on pick so mc does not select blocks on middle click after we start flying
83+
/**
84+
* Returns true when the pick interaction should be canceled.
85+
*/
8186
fun onPick() =
8287
runSafe {
8388
if (!middleClick) return false
8489
if (mc.crosshairTarget?.type == HitResult.Type.BLOCK && !middleClickCancel) {
8590
return false
8691
}
8792
if (player.isGliding) {
88-
startFirework(silent)
93+
// If already gliding use another firework
94+
startFirework(silentUse)
8995
} else {
90-
startFlying()
96+
tryTakeoff()
9197
}
9298
return true
9399
} ?: false // Edouardo: :3333333
94100

95-
fun SafeContext.startFlying(): Boolean {
101+
/**
102+
* This function prepares takeoff from standing or falling.
103+
* If the player is standing on ground it jumps to prepare for takeoff and return true.
104+
* If the player is falling it opens the elytra, uses a firework and return true.
105+
* Otherwise, return false and does nothing.
106+
*/
107+
fun SafeContext.tryTakeoff(): Boolean {
96108
if (player.isOnGround) {
97-
state = BetterFireworkState.WAIT_AIRBORNE
98109
player.jump()
99-
openDelay = 1; // Magic number
110+
openDelay = 1; // Magic number, works on 2b so we GUCCI
100111
return true
101112
}
102113

103-
if (player.isGliding) return false
104-
105114
if (canOpenElytra(player)) {
106115
connection.sendPacket(ClientCommandC2SPacket(player, ClientCommandC2SPacket.Mode.START_FALL_FLYING))
107-
startFirework(silent)
116+
startFirework(silentUse)
108117
return true
109118
}
110119

@@ -116,13 +125,17 @@ object BetterFirework : Module(
116125
}
117126

118127
fun SafeContext.sendSwing() {
119-
if (swing) {
128+
if (clientSwing) {
120129
player.swingHand(Hand.MAIN_HAND)
121130
} else {
122131
connection.sendPacket(HandSwingC2SPacket(Hand.MAIN_HAND))
123132
}
124133
}
125134

135+
/**
136+
* Use a firework from the hotbar or inventory if possible.
137+
* Return true if a firework has been used
138+
*/
126139
fun SafeContext.startFirework(silent: Boolean): Boolean {
127140
val fireworkSlot = getFireworkAtHotbar()
128141
if (fireworkSlot != -1) {
@@ -171,9 +184,4 @@ object BetterFirework : Module(
171184
}
172185
return -1
173186
}
174-
175-
enum class BetterFireworkState {
176-
IDLE,
177-
WAIT_AIRBORNE
178-
}
179187
}

0 commit comments

Comments
 (0)