@@ -21,9 +21,12 @@ import com.lambda.config.ConfigBlock
2121import com.lambda.context.Automated
2222import com.lambda.context.SafeContext
2323import com.lambda.event.Muteable
24+ import com.lambda.event.events.PacketEvent
2425import com.lambda.event.events.TickEvent
2526import com.lambda.event.listener.SafeListener.Companion.listen
2627import com.lambda.interaction.handlers.GlideHandler.ELYTRA_SELECTION
28+ import com.lambda.interaction.managers.hotbar.HotbarRequest
29+ import com.lambda.interaction.managers.inventory.InventoryManager
2730import com.lambda.interaction.managers.inventory.InventoryRequest
2831import com.lambda.interaction.managers.inventory.InventoryRequest.Companion.inventoryRequest
2932import com.lambda.module.modules.movement.elytrafly.ElytraFly.FlyMode
@@ -36,7 +39,10 @@ import net.minecraft.entity.Entity
3639import net.minecraft.entity.EquipmentSlot
3740import net.minecraft.item.Items
3841import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket
42+ import net.minecraft.network.packet.s2c.play.InventoryS2CPacket
43+ import net.minecraft.network.packet.s2c.play.ScreenHandlerSlotUpdateS2CPacket
3944import net.minecraft.screen.slot.Slot
45+ import net.minecraft.util.Hand
4046
4147abstract class ElytraFlyMode (
4248 val flyMode : FlyMode
@@ -54,6 +60,11 @@ abstract class ElytraFlyMode(
5460 listen<TickEvent .Pre >({ 100 }) {
5561 fakeGliding = fakeFly && fakeGliding && player.canGlide()
5662 }
63+
64+ listen<PacketEvent .Receive .Pre >({ 100 }) { event ->
65+ if (event.packet !is InventoryS2CPacket && event.packet !is ScreenHandlerSlotUpdateS2CPacket ) return @listen
66+ if (fakeGliding) event.cancel()
67+ }
5768 }
5869
5970 protected fun onEnable (callback : SafeContext .() -> Unit ) { onEnableListeners.add(callback) }
@@ -82,21 +93,34 @@ abstract class ElytraFlyMode(
8293 }
8394 val elytraInHotbar = elytraSlot.index in 0 .. 8
8495
85- val chestSlot = player.armorSlots[ 1 ]
96+ val chestSlot = player.armorSlots.getOrNull( 1 ) ? : return false
8697
98+ if (elytraInHotbar) {
99+ val hotbarRequest = HotbarRequest (
100+ elytraSlot.index,
101+ ElytraFly ,
102+ keepTicks = 0 ,
103+ nowOrNothing = true
104+ ).submit()
105+ if (! hotbarRequest.done) return false
106+ }
87107 fun InventoryRequest.InvRequestBuilder.swapChest () {
88- if (elytraInHotbar) swap(chestSlot.id, elytraSlot.index)
89- else {
108+ if (elytraInHotbar) {
109+ interaction.interactItem(player, Hand .MAIN_HAND )
110+ InventoryManager .indexInventoryChanges()
111+ } else {
90112 moveSlot(elytraSlot.id, chestSlot.id)
91113 if (! chestSlot.stack.isEmpty) pickup(elytraSlot.id)
92114 }
93115 }
94116
95- return inventoryRequest {
117+ val inventoryRequest = inventoryRequest {
96118 swapChest()
97119 action { startFly() }
98120 swapChest()
99- }.submit(false ).done
121+ }.submit(false )
122+
123+ return inventoryRequest.done
100124 }
101125
102126 fun SafeContext.findElytra (): Slot ? =
0 commit comments