@@ -20,18 +20,19 @@ package com.lambda.module.modules.movement
2020import com.lambda.context.SafeContext
2121import com.lambda.event.events.TickEvent
2222import com.lambda.event.listener.SafeListener.Companion.listen
23+ import com.lambda.interaction.material.StackSelection.Companion.selectStack
2324import com.lambda.module.Module
2425import com.lambda.module.tag.ModuleTag
2526import com.lambda.threading.runSafe
27+ import com.lambda.util.player.SlotUtils.hotbar
28+ import com.lambda.util.player.SlotUtils.storage
2629import net.minecraft.client.network.ClientPlayerEntity
2730import net.minecraft.entity.effect.StatusEffects
28- import net.minecraft.item.ItemStack
2931import net.minecraft.item.Items
3032import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket
3133import net.minecraft.network.packet.c2s.play.HandSwingC2SPacket
3234import net.minecraft.network.packet.c2s.play.PlayerInteractItemC2SPacket
3335import net.minecraft.network.packet.c2s.play.UpdateSelectedSlotC2SPacket
34- import net.minecraft.screen.PlayerScreenHandler
3536import net.minecraft.screen.slot.SlotActionType
3637import net.minecraft.util.Hand
3738import 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