Skip to content

Commit 0501a99

Browse files
committed
fix elytra auto-open being weird with ladders and edges of slabs
Signed-off-by: Octol1ttle <[email protected]>
1 parent 8b85955 commit 0501a99

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

src/main/java/ru/octol1ttle/flightassistant/mixin/EntityInvoker.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,7 @@ public interface EntityInvoker {
99
/*@org.spongepowered.asm.mixin.gen.Invoker("isInvulnerableToBase")
1010
boolean invokeIsInvulnerableToBase(net.minecraft.world.damagesource.DamageSource damageSource);
1111
*///?}
12+
13+
@org.spongepowered.asm.mixin.gen.Invoker("isStateClimbable")
14+
boolean invokeIsStateClimbable(net.minecraft.world.level.block.state.BlockState state);
1215
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package ru.octol1ttle.flightassistant.api.util.extensions
2+
3+
import net.minecraft.world.entity.Entity
4+
import net.minecraft.world.level.block.state.BlockState
5+
import ru.octol1ttle.flightassistant.mixin.EntityInvoker
6+
7+
fun BlockState.notClimbable(entity: Entity): Boolean {
8+
return isAir || !(entity as EntityInvoker).invokeIsStateClimbable(this)
9+
}

src/main/kotlin/ru/octol1ttle/flightassistant/impl/computer/safety/ElytraStatusComputer.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import ru.octol1ttle.flightassistant.FlightAssistant
1515
import ru.octol1ttle.flightassistant.api.computer.Computer
1616
import ru.octol1ttle.flightassistant.api.computer.ComputerBus
1717
import ru.octol1ttle.flightassistant.api.util.extensions.formatRoot
18+
import ru.octol1ttle.flightassistant.api.util.extensions.notClimbable
1819
import ru.octol1ttle.flightassistant.config.FAConfig
1920
import ru.octol1ttle.flightassistant.config.options.DisplayOptions
2021
import ru.octol1ttle.flightassistant.impl.computer.data.AirDataComputer
@@ -51,9 +52,9 @@ class ElytraStatusComputer(computers: ComputerBus) : Computer(computers) {
5152
/*net.minecraft.world.entity.EquipmentSlot.VALUES.any { data.player.getItemBySlot(it) == activeElytra && net.minecraft.world.entity.LivingEntity.canGlideUsing(data.player.getItemBySlot(it), it) }
5253
*///?} else
5354
data.player.armorSlots.contains(activeElytra) && net.minecraft.world.item.ElytraItem.isFlyEnabled(activeElytra!!)
54-
val isInsideBlock: Boolean = !data.player.blockStateOn.isAir
55+
val noneClimbable: Boolean = data.player.blockStateOn.notClimbable(data.player) && data.player.feetBlockState.notClimbable(data.player)
5556
val lookingToClutch: Boolean = data.pitch <= -70.0f
56-
if (FAConfig.safety.elytraAutoOpen && !flying && !data.fallDistanceSafe && hasUsableElytra && !isInsideBlock && !lookingToClutch) {
57+
if (FAConfig.safety.elytraAutoOpen && !flying && !data.fallDistanceSafe && hasUsableElytra && noneClimbable && !lookingToClutch) {
5758
sendSwitchState(data)
5859
}
5960
}

0 commit comments

Comments
 (0)