From 36ce9a4b8418e94e71e8aa35ea28a2cd58a9a09e Mon Sep 17 00:00:00 2001 From: Bixilon Date: Tue, 10 Jan 2023 20:33:09 +0100 Subject: [PATCH] elytra extractor --- .../pixlyzer/physics/PhysicsExtractor.kt | 7 +- .../bixilon/pixlyzer/physics/PhysicsTags.kt | 8 ++ .../physics/abstractions/MinecraftPlayer.kt | 3 + .../physics/abstractions/MinecraftWorld.kt | 2 +- .../pixlyzer/physics/input/CustomInput.kt | 13 +- .../pixlyzer/physics/tests/ElytraExtractor.kt | 113 ++++++++++++++++++ .../tests/fluid/still/LavaStillExtractor.kt | 2 +- .../tests/fluid/still/StillFluidExtractor.kt | 6 +- .../tests/fluid/still/WaterStillExtractor.kt | 2 +- 9 files changed, 141 insertions(+), 15 deletions(-) create mode 100644 src/main/kotlin/de/bixilon/pixlyzer/physics/tests/ElytraExtractor.kt diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsExtractor.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsExtractor.kt index 785ac23..325008b 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsExtractor.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsExtractor.kt @@ -70,9 +70,10 @@ object PhysicsExtractor { // MixedFluidExtractor::class.java, // DamageExtractor::class.java, - VelocityFlatteningExtractor::class.java, - IceWalk::class.java, - AbilitiesExtractor::class.java, + // VelocityFlatteningExtractor::class.java, + // IceWalk::class.java, + // AbilitiesExtractor::class.java, + ElytraExtractor::class.java, ) diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsTags.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsTags.kt index b5dbd76..78880f5 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsTags.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsTags.kt @@ -1,11 +1,19 @@ package de.bixilon.pixlyzer.physics +import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.pixlyzer.physics.tests.fluid.FluidUtil.addTags import net.minecraft.block.Blocks +import net.minecraft.block.FluidBlock +import net.minecraft.fluid.Fluids import net.minecraft.tag.BlockTags +import net.minecraft.tag.FluidTags object PhysicsTags { fun initialize() { Blocks.SOUL_SAND.registryEntry.tags = setOf(BlockTags.SOUL_SPEED_BLOCKS) + + Blocks.WATER.unsafeCast().addTags(FluidTags.WATER) + Blocks.LAVA.unsafeCast().addTags(FluidTags.LAVA) } } diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/abstractions/MinecraftPlayer.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/abstractions/MinecraftPlayer.kt index 86ade9d..ddd2270 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/abstractions/MinecraftPlayer.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/abstractions/MinecraftPlayer.kt @@ -56,6 +56,7 @@ class MinecraftPlayer( jump: Boolean = false, sneak: Boolean = false, sprint: Boolean = false, + jumpNextTick: Boolean = false, ) { val input = CustomInput() input.pressingForward = forwards @@ -67,6 +68,8 @@ class MinecraftPlayer( this.sprint.value = sprint native.input = input + + input.jumpNextTick = jumpNextTick } fun setAbilities( diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/abstractions/MinecraftWorld.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/abstractions/MinecraftWorld.kt index faf0ec4..8909568 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/abstractions/MinecraftWorld.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/abstractions/MinecraftWorld.kt @@ -10,7 +10,7 @@ import net.minecraft.world.dimension.DimensionType class MinecraftWorld( val level: ClientWorld, ) { - fun set(x: Int, y: Int, z: Int, value: BlockState?) { + operator fun set(x: Int, y: Int, z: Int, value: BlockState?) { try { level.setBlockState(BlockPos(x, y, z), value) } catch (error: Throwable) { diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/input/CustomInput.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/input/CustomInput.kt index 877b100..7c084bf 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/input/CustomInput.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/input/CustomInput.kt @@ -3,11 +3,12 @@ package de.bixilon.pixlyzer.physics.input import net.minecraft.client.input.Input import net.minecraft.client.input.KeyboardInput -class CustomInput : Input() { +class CustomInput() : Input() { + var jumpNextTick: Boolean = false - fun tick(slowDown: Boolean) { - tick(slowDown, 0.3f) - } + fun tick(slowDown: Boolean) { + tick(slowDown, 0.3f) + } fun getMovementMultiplier(positive: Boolean, negative: Boolean): Float { return if (positive == negative) { @@ -24,5 +25,9 @@ class CustomInput : Input() { movementSideways *= multiplier movementForward *= multiplier } + if (jumpNextTick) { + jumping = true + jumpNextTick = false + } } } diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/ElytraExtractor.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/ElytraExtractor.kt new file mode 100644 index 0000000..2e154eb --- /dev/null +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/ElytraExtractor.kt @@ -0,0 +1,113 @@ +package de.bixilon.pixlyzer.physics.tests + +import net.minecraft.block.Blocks +import net.minecraft.entity.EquipmentSlot +import net.minecraft.item.ItemStack +import net.minecraft.item.Items + +class ElytraExtractor : AbstractExtractor() { + + private fun equip() { + val item = ItemStack(Items.ELYTRA) + player.native.equipStack(EquipmentSlot.CHEST, item) + } + + @ExtractorMethod + fun elytraStartFly() { + player.teleport(17.0, 9.5, 8.0) + equip() + player.tick(3) + player.setKeys(jumpNextTick = true) + player.tick(1) + storeMovement() + } + + @ExtractorMethod + fun elytraFlyStraight() { + player.teleport(0.0, 30.5, 0.0) + player.rotate(0.0, 10.0) + equip() + player.tick(3) + player.setKeys(jumpNextTick = true) + player.tick(15) + storeMovement() + } + + @ExtractorMethod + fun elytraFlyUp() { + player.teleport(0.0, 30.5, 0.0) + equip() + player.tick(3) + player.setKeys(jumpNextTick = true) + player.tick(1) + player.setVelocity(0.0, 0.0, 3.0) + player.rotate(0.0, -10.0) + player.tick(5) + storeMovement() + } + + @ExtractorMethod + fun elytraFlyRotated() { + player.teleport(0.0, 30.5, 0.0) + equip() + player.tick(3) + player.setKeys(jumpNextTick = true) + player.tick(1) + + for (x in 0..100) { + player.tick() + player.rotate(kotlin.math.sin(x / Math.PI / 100.0) * 400.0, 0.0) + } + + storeMovement() + } + + @ExtractorMethod + fun elytraWater() { + player.teleport(0.0, 31.8, 0.0) + equip() + world.fill(-3, 30, -3, 3, 33, 3, Blocks.WATER.defaultState) + + player.tick(3) + player.setKeys(jumpNextTick = true) + player.tick(5) + + storeMovement() + } + + @ExtractorMethod + fun elytraLava() { + player.teleport(0.0, 31.8, 0.0) + equip() + world.fill(-3, 30, -3, 3, 33, 3, Blocks.LAVA.defaultState) + player.tick(3) + player.setKeys(jumpNextTick = true) + player.tick(5) + + storeMovement() + } + + @ExtractorMethod + fun elytraLevitation() { + player.teleport(0.0, 30.8, 0.0) + player.applyLevitation(1) + equip() + player.tick(3) + player.setKeys(jumpNextTick = true) + player.tick(10) + + storeMovement() + } + + @ExtractorMethod + fun elytraSlowFalling() { + player.teleport(0.0, 30.8, 0.0) + player.applySlowFalling() + equip() + player.tick(3) + player.setKeys(jumpNextTick = true) + player.tick(10) + + storeMovement() + } +} diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/LavaStillExtractor.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/LavaStillExtractor.kt index a92e2c2..0a514e6 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/LavaStillExtractor.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/LavaStillExtractor.kt @@ -5,7 +5,7 @@ import de.bixilon.pixlyzer.physics.tests.ExtractorMethod import net.minecraft.block.Blocks import net.minecraft.tag.FluidTags -class LavaStillExtractor : StillFluidExtractor(Blocks.LAVA.unsafeCast(), FluidTags.LAVA) { +class LavaStillExtractor : StillFluidExtractor(Blocks.LAVA.unsafeCast()) { @ExtractorMethod fun lavaStillLanding1() { diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/StillFluidExtractor.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/StillFluidExtractor.kt index d63137e..3f61bb4 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/StillFluidExtractor.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/StillFluidExtractor.kt @@ -10,12 +10,8 @@ import net.minecraft.tag.TagKey abstract class StillFluidExtractor( protected val fluid: FluidBlock, - protected val tag: TagKey, -) : AbstractExtractor() { - init { - fluid.addTags(tag) - } + ) : AbstractExtractor() { protected fun walking() { world.fill(-10, 16, -10, 20, 16, 20, fluid.withLevel(0)) diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/WaterStillExtractor.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/WaterStillExtractor.kt index 9e6ca30..6b5fa1f 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/WaterStillExtractor.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/WaterStillExtractor.kt @@ -5,7 +5,7 @@ import de.bixilon.pixlyzer.physics.tests.ExtractorMethod import net.minecraft.block.Blocks import net.minecraft.tag.FluidTags -class WaterStillExtractor : StillFluidExtractor(Blocks.WATER.unsafeCast(), FluidTags.WATER) { +class WaterStillExtractor : StillFluidExtractor(Blocks.WATER.unsafeCast()) { @ExtractorMethod fun waterStillLanding1() {