Skip to content

Commit daebacd

Browse files
committed
Nits
1 parent 44c5ae1 commit daebacd

File tree

2 files changed

+54
-59
lines changed

2 files changed

+54
-59
lines changed

src/main/java/com/lambda/mixin/MinecraftClientMixin.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -190,18 +190,16 @@ void injectFastPlace(CallbackInfo ci) {
190190
itemUseCooldown = Interact.getPlaceDelay();
191191
}
192192

193-
@Inject(method = "doItemUse", at = @At(value = "HEAD"), cancellable = true)
194-
void injectItemUse(CallbackInfo ci) {
195-
if (!BetterFirework.INSTANCE.isEnabled()) return;
196-
197-
if (BetterFirework.INSTANCE.onInteract()) ci.cancel();
193+
@WrapMethod(method = "doItemUse")
194+
void injectItemUse(Operation<Void> original) {
195+
if (BetterFirework.INSTANCE.isDisabled() || !BetterFirework.onInteract())
196+
original.call();
198197
}
199198

200-
@Inject(method = "doItemPick", at = @At(value = "HEAD"), cancellable = true)
201-
void injectItemPick(CallbackInfo ci) {
202-
if (!BetterFirework.INSTANCE.isEnabled()) return;
203-
204-
if (BetterFirework.INSTANCE.onPick()) ci.cancel();
199+
@WrapMethod(method = "doItemPick")
200+
void injectItemPick(Operation<Void> original) {
201+
if (BetterFirework.INSTANCE.isDisabled() || !BetterFirework.onPick())
202+
original.call();
205203
}
206204

207205
@WrapMethod(method = "getTargetMillisPerTick")

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

Lines changed: 46 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,19 @@ package com.lambda.module.modules.movement
2020
import com.lambda.context.SafeContext
2121
import com.lambda.event.events.TickEvent
2222
import com.lambda.event.listener.SafeListener.Companion.listen
23+
import com.lambda.interaction.material.StackSelection.Companion.selectStack
2324
import com.lambda.module.Module
2425
import com.lambda.module.tag.ModuleTag
2526
import com.lambda.threading.runSafe
27+
import com.lambda.util.player.SlotUtils.hotbar
28+
import com.lambda.util.player.SlotUtils.storage
2629
import net.minecraft.client.network.ClientPlayerEntity
2730
import net.minecraft.entity.effect.StatusEffects
28-
import net.minecraft.item.ItemStack
2931
import net.minecraft.item.Items
3032
import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket
3133
import net.minecraft.network.packet.c2s.play.HandSwingC2SPacket
3234
import net.minecraft.network.packet.c2s.play.PlayerInteractItemC2SPacket
3335
import net.minecraft.network.packet.c2s.play.UpdateSelectedSlotC2SPacket
34-
import net.minecraft.screen.PlayerScreenHandler
3536
import net.minecraft.screen.slot.SlotActionType
3637
import net.minecraft.util.Hand
3738
import net.minecraft.util.hit.HitResult
@@ -42,24 +43,32 @@ object BetterFirework : Module(
4243
tag = ModuleTag.MOVEMENT,
4344
) {
4445
private var fireworkInteract by setting("Firework Interact", true, "Automatically start flying when right clicking fireworks")
45-
private var fireworkInteractCancel by setting("Firework Interact Cancel", false, "Cancel block interactions while holding fireworks", visibility = { fireworkInteract })
46+
private var fireworkInteractCancel by setting("Firework Interact Cancel", false, "Cancel block interactions while holding fireworks") { fireworkInteract }
47+
4648
private var middleClick by setting("Middle Click", true, "Use firework on middle mouse click")
47-
private var middleClickCancel by setting("Middle Click Cancel", false, description = "Cancel pick block action on middle mouse click", visibility = { middleClick })
49+
private var middleClickCancel by setting("Middle Click Cancel", false, description = "Cancel pick block action on middle mouse click") { middleClick }
50+
4851
private var clientSwing by setting("Swing", true, "Swing hand client side")
49-
private var silentUse by setting("Silent", true, "Silent use fireworks from the inventory", visibility = { middleClick })
52+
private var silentUse by setting("Silent", true, "Silent use fireworks from the inventory") { middleClick }
5053

5154
private var takeoffState = TakeoffState.NONE
5255

56+
val ClientPlayerEntity.canTakeoff: Boolean
57+
get() = isOnGround || canOpenElytra
58+
59+
val ClientPlayerEntity.canOpenElytra: Boolean
60+
get() = !abilities.flying && !isClimbing && !isGliding && !isTouchingWater && !isOnGround && !hasVehicle() && !hasStatusEffect(StatusEffects.LEVITATION)
61+
5362
init {
5463
listen<TickEvent.Pre> {
5564
when (takeoffState) {
56-
TakeoffState.NONE -> {
57-
// Nothing to do
58-
}
65+
TakeoffState.NONE -> {}
66+
5967
TakeoffState.JUMPING -> {
6068
player.jump()
6169
takeoffState = TakeoffState.START_FLYING
6270
}
71+
6372
TakeoffState.START_FLYING -> {
6473
if (player.canOpenElytra) {
6574
player.startGliding()
@@ -75,6 +84,7 @@ object BetterFirework : Module(
7584
/**
7685
* Returns true if the mc item interaction should be canceled
7786
*/
87+
@JvmStatic
7888
fun onInteract() =
7989
runSafe {
8090
if (!fireworkInteract) return false
@@ -100,6 +110,7 @@ object BetterFirework : Module(
100110
/**
101111
* Returns true when the pick interaction should be canceled.
102112
*/
113+
@JvmStatic
103114
fun onPick() =
104115
runSafe {
105116
if (!middleClick) return false
@@ -116,13 +127,7 @@ object BetterFirework : Module(
116127
takeoffState = TakeoffState.JUMPING
117128
}
118129
return true
119-
} ?: false // Edouardo: :3333333
120-
121-
val ClientPlayerEntity.canTakeoff: Boolean
122-
get() = isOnGround || canOpenElytra
123-
124-
val ClientPlayerEntity.canOpenElytra: Boolean
125-
get() = !abilities.flying && !isClimbing && !isGliding && !isTouchingWater && !isOnGround && !hasVehicle() && !hasStatusEffect(StatusEffects.LEVITATION)
130+
} ?: false
126131

127132
fun SafeContext.sendSwing() {
128133
if (clientSwing) {
@@ -137,57 +142,49 @@ object BetterFirework : Module(
137142
* Return true if a firework has been used
138143
*/
139144
fun SafeContext.startFirework(silent: Boolean): Boolean {
140-
val fireworkSlot = getFireworkAtHotbar()
141-
if (fireworkSlot != -1) {
142-
player.networkHandler.sendPacket(UpdateSelectedSlotC2SPacket(fireworkSlot))
143-
player.networkHandler.sendPacket(PlayerInteractItemC2SPacket(Hand.MAIN_HAND, 0, player.yaw, player.pitch))
144-
sendSwing()
145-
player.networkHandler.sendPacket(UpdateSelectedSlotC2SPacket(player.getInventory().selectedSlot))
146-
return true
147-
} else if (silent) {
148-
val fireworkIndex = getFireworkInInventoryScreen()
149-
if (fireworkIndex != -1) {
150-
interaction.clickSlot(player.playerScreenHandler.syncId, fireworkIndex, 0, SlotActionType.SWAP, mc.player)
145+
val stack = selectStack(count = 1) { isItem(Items.FIREWORK_ROCKET) }
146+
147+
stack.bestItemMatch(player.hotbar)
148+
?.let {
149+
val swap = player.hotbar.indexOf(it)
150+
151+
player.networkHandler.sendPacket(UpdateSelectedSlotC2SPacket(swap))
152+
player.networkHandler.sendPacket(PlayerInteractItemC2SPacket(Hand.MAIN_HAND, 0, player.yaw, player.pitch))
153+
sendSwing()
154+
player.networkHandler.sendPacket(UpdateSelectedSlotC2SPacket(player.getInventory().selectedSlot))
155+
156+
return true
157+
}
158+
159+
if (!silent) return false
160+
161+
stack.bestItemMatch(player.storage)
162+
?.let {
163+
val swap = player.storage.indexOf(it)
164+
165+
interaction.clickSlot(player.playerScreenHandler.syncId, swap, 0, SlotActionType.SWAP, mc.player)
151166

152167
if (player.getInventory().selectedSlot != 0) {
153168
player.networkHandler.sendPacket(UpdateSelectedSlotC2SPacket(0))
154169
player.networkHandler.sendPacket(PlayerInteractItemC2SPacket(Hand.MAIN_HAND, 0, player.yaw, player.pitch))
155170
sendSwing()
156171
player.networkHandler.sendPacket(UpdateSelectedSlotC2SPacket(player.getInventory().selectedSlot))
157172
} else {
158-
player.networkHandler.sendPacket(PlayerInteractItemC2SPacket(Hand.MAIN_HAND, 0, player.getYaw(), player.getPitch()))
173+
player.networkHandler.sendPacket(PlayerInteractItemC2SPacket(Hand.MAIN_HAND, 0, player.yaw, player.pitch))
159174
sendSwing()
160175
}
161176

162-
interaction.clickSlot(player.playerScreenHandler.syncId, fireworkIndex, 0, SlotActionType.SWAP, mc.player)
177+
interaction.clickSlot(player.playerScreenHandler.syncId, swap, 0, SlotActionType.SWAP, mc.player)
178+
163179
return true
164180
}
165-
}
166-
return false
167-
}
168181

169-
private fun SafeContext.getFireworkAtHotbar(): Int {
170-
for (i in 0..8) {
171-
val itemStack: ItemStack = player.getInventory().getStack(i)
172-
if (itemStack.item !== Items.FIREWORK_ROCKET) continue
173-
return i
174-
}
175-
return -1
176-
}
177-
178-
private fun SafeContext.getFireworkInInventoryScreen(): Int {
179-
val screenHandler: PlayerScreenHandler = player.playerScreenHandler
180-
for (i in PlayerScreenHandler.INVENTORY_START..<PlayerScreenHandler.INVENTORY_END) {
181-
val itemStack = screenHandler.getSlot(i).stack
182-
if (itemStack.item !== Items.FIREWORK_ROCKET) continue
183-
return i
184-
}
185-
return -1
182+
return false
186183
}
187184

188185
enum class TakeoffState {
189186
NONE,
190187
JUMPING,
191188
START_FLYING
192189
}
193-
}
190+
}

0 commit comments

Comments
 (0)