mirror of
https://gitlab.bixilon.de/bixilon/pixlyzer-physics.git
synced 2025-08-03 10:16:54 -04:00
riding extractors, more abstractions
This commit is contained in:
parent
57438e7abc
commit
6c3b9c1727
15
ReadME.md
15
ReadME.md
@ -88,10 +88,21 @@ This [pixlyzer](https://gitlab.bixilon.de/bixilon/pixlyzer) module runs physics
|
||||
- end of world (everything >= 30M)
|
||||
- abilities (flying, walk speed, fly speed)
|
||||
- tags
|
||||
- tags
|
||||
|
||||
## Additional entity physics
|
||||
|
||||
- rideable entities
|
||||
## Ridable entities
|
||||
|
||||
(only client controlled)
|
||||
|
||||
- strider (with warped fungus on a stick)
|
||||
- pig (with carrot on a stick)
|
||||
- all horses (with controls and jumping)
|
||||
- boat
|
||||
|
||||
## Client calculated
|
||||
|
||||
- items
|
||||
- projectiles
|
||||
- firework rockets
|
||||
@ -110,5 +121,5 @@ New tests can/will always be added, existing tests may only be changed if they b
|
||||
Parkour code (attach debugger in `ClientPlayerEntity`, where `getTutorialManager` is called):
|
||||
|
||||
```java
|
||||
"f=" + input.pressingForward + ",b=" + input.pressingBack + ",l=" + input.pressingLeft + ",r=" + input.pressingRight + ",j=" + input.jumping + ",sn=" + input.sneaking + ",sp=" + client.options.sprintKey.isPressed() + " --> " + getX() + "|" + getY() + "|" + getZ() + " " + yaw + "|" + pitch
|
||||
"f="+input.pressingForward+",b="+input.pressingBack+",l="+input.pressingLeft+",r="+input.pressingRight+",j="+input.jumping+",sn="+input.sneaking+",sp="+client.options.sprintKey.isPressed()+" --> "+getX()+"|"+getY()+"|"+getZ()+" "+yaw+"|"+pitch
|
||||
```
|
||||
|
@ -14,7 +14,9 @@ import de.bixilon.pixlyzer.physics.tests.fluid.still.LavaStillExtractor
|
||||
import de.bixilon.pixlyzer.physics.tests.fluid.still.MixedFluidExtractor
|
||||
import de.bixilon.pixlyzer.physics.tests.fluid.still.WaterStillExtractor
|
||||
import de.bixilon.pixlyzer.physics.tests.health.DamageExtractor
|
||||
import de.bixilon.pixlyzer.physics.tests.input.SneakExtractor
|
||||
import de.bixilon.pixlyzer.physics.tests.precision.VelocityFlatteningExtractor
|
||||
import de.bixilon.pixlyzer.physics.tests.riding.*
|
||||
import de.bixilon.pixlyzer.physics.tests.server.AbilitiesExtractor
|
||||
import java.lang.reflect.Method
|
||||
import kotlin.system.exitProcess
|
||||
@ -73,7 +75,14 @@ object PhysicsExtractor {
|
||||
// VelocityFlatteningExtractor::class.java,
|
||||
// IceWalk::class.java,
|
||||
// AbilitiesExtractor::class.java,
|
||||
ElytraExtractor::class.java,
|
||||
// ElytraExtractor::class.java,
|
||||
|
||||
PigRidingExtractor::class.java,
|
||||
StriderExtractor::class.java,
|
||||
HorseExtractor::class.java,
|
||||
BoatExtractor::class.java,
|
||||
MinecartExtractor::class.java,
|
||||
SpiderExtractor::class.java,
|
||||
)
|
||||
|
||||
|
||||
|
@ -19,7 +19,6 @@ import net.minecraft.client.input.Input
|
||||
import net.minecraft.client.network.*
|
||||
import net.minecraft.client.option.GameOptions
|
||||
import net.minecraft.client.recipebook.ClientRecipeBook
|
||||
import net.minecraft.client.sound.SoundManager
|
||||
import net.minecraft.client.tutorial.TutorialManager
|
||||
import net.minecraft.client.world.ClientChunkManager
|
||||
import net.minecraft.client.world.ClientEntityManager
|
||||
@ -186,7 +185,7 @@ object PhysicsUtil {
|
||||
fun createPlayer(world: MinecraftWorld): MinecraftPlayer {
|
||||
val client = createMinecraftClient()
|
||||
val networkHandler = createNetworkHandler(client)
|
||||
val native = ClientPlayerEntityImpl(client, world.level, networkHandler, StatHandler(), ClientRecipeBook())
|
||||
val native = ClientPlayerEntityImpl(client, world.native, networkHandler, StatHandler(), ClientRecipeBook())
|
||||
|
||||
client.player = native
|
||||
PLAYER_ENTRY?.set(native, createPlayerListEntry())
|
||||
|
@ -0,0 +1,26 @@
|
||||
package de.bixilon.pixlyzer.physics.abstractions
|
||||
|
||||
import net.minecraft.entity.Entity
|
||||
import net.minecraft.util.math.Vec3d
|
||||
|
||||
open class MinecraftEntity<T : Entity>(val native: T) {
|
||||
|
||||
fun tick(count: Int = 1) {
|
||||
for (i in 0 until count) {
|
||||
native.tick()
|
||||
}
|
||||
}
|
||||
|
||||
fun teleport(x: Double, y: Double, z: Double) {
|
||||
native.setPosition(Vec3d(x, y, z))
|
||||
}
|
||||
|
||||
fun setVelocity(x: Double, y: Double, z: Double) {
|
||||
native.velocity = Vec3d(x, y, z)
|
||||
}
|
||||
|
||||
fun rotate(yaw: Float, pitch: Float) {
|
||||
native.setRotation(yaw, pitch)
|
||||
}
|
||||
|
||||
}
|
@ -13,35 +13,16 @@ import net.minecraft.item.ItemStack
|
||||
import net.minecraft.item.Items
|
||||
import net.minecraft.network.Packet
|
||||
import net.minecraft.network.listener.ClientPlayPacketListener
|
||||
import net.minecraft.util.math.Vec3d
|
||||
|
||||
class MinecraftPlayer(
|
||||
val native: ClientPlayerEntity,
|
||||
native: ClientPlayerEntity,
|
||||
private val sprint: DummyBinding,
|
||||
) {
|
||||
) : MinecraftEntity<ClientPlayerEntity>(native) {
|
||||
|
||||
fun handlePacket(packet: Packet<ClientPlayPacketListener>) {
|
||||
packet.apply(native.networkHandler)
|
||||
}
|
||||
|
||||
fun tick(count: Int = 1) {
|
||||
for (i in 0 until count) {
|
||||
native.tick()
|
||||
}
|
||||
}
|
||||
|
||||
fun teleport(x: Double, y: Double, z: Double) {
|
||||
native.setPosition(Vec3d(x, y, z))
|
||||
}
|
||||
|
||||
fun setVelocity(x: Double, y: Double, z: Double) {
|
||||
native.velocity = Vec3d(x, y, z)
|
||||
}
|
||||
|
||||
fun rotate(yaw: Float, pitch: Float) {
|
||||
native.setRotation(yaw, pitch)
|
||||
}
|
||||
|
||||
var flying: Boolean
|
||||
get() = native.abilities.flying
|
||||
set(value) {
|
||||
@ -158,4 +139,10 @@ class MinecraftPlayer(
|
||||
boots.addEnchantment(Enchantments.SWIFT_SNEAK, level)
|
||||
native.equipStack(EquipmentSlot.LEGS, boots)
|
||||
}
|
||||
|
||||
fun startRiding(vehicle: MinecraftVehicle<*>) {
|
||||
if (!native.startRiding(vehicle.native)) {
|
||||
throw IllegalStateException("Failed to start riding!")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,6 @@
|
||||
package de.bixilon.pixlyzer.physics.abstractions
|
||||
|
||||
import net.minecraft.entity.Entity
|
||||
|
||||
class MinecraftVehicle<T : Entity>(native: T) : MinecraftEntity<T>(native) {
|
||||
}
|
@ -8,11 +8,11 @@ import net.minecraft.util.math.random.Random
|
||||
import net.minecraft.world.dimension.DimensionType
|
||||
|
||||
class MinecraftWorld(
|
||||
val level: ClientWorld,
|
||||
val native: ClientWorld,
|
||||
) {
|
||||
operator fun set(x: Int, y: Int, z: Int, value: BlockState?) {
|
||||
try {
|
||||
level.setBlockState(BlockPos(x, y, z), value)
|
||||
native.setBlockState(BlockPos(x, y, z), value)
|
||||
} catch (error: Throwable) {
|
||||
val cause = error.cause ?: error
|
||||
if (cause is NullPointerException && cause.message!!.contains("worldRenderer")) {
|
||||
@ -33,7 +33,7 @@ class MinecraftWorld(
|
||||
}
|
||||
|
||||
fun initRandom() {
|
||||
level.random = Random.create(0L) // particles
|
||||
native.random = Random.create(0L) // particles
|
||||
}
|
||||
|
||||
var ultrawarm: Boolean = false
|
||||
@ -42,6 +42,6 @@ class MinecraftWorld(
|
||||
val type = DimensionType::class.java
|
||||
val field = type.getDeclaredField("ultrawarm")
|
||||
field.isAccessible = true
|
||||
field.setBoolean(level.getDimension(), value)
|
||||
field.setBoolean(native.getDimension(), value)
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import net.minecraft.client.world.ClientWorld
|
||||
import net.minecraft.entity.Entity
|
||||
import net.minecraft.entity.player.PlayerEntity
|
||||
import net.minecraft.nbt.NbtCompound
|
||||
import net.minecraft.network.Packet
|
||||
import net.minecraft.particle.ParticleEffect
|
||||
import net.minecraft.sound.SoundCategory
|
||||
import net.minecraft.sound.SoundEvent
|
||||
@ -36,4 +37,6 @@ class ClientWorldImpl private constructor() : ClientWorld(null, null, null, null
|
||||
|
||||
|
||||
override fun shouldUpdatePostDeath(entity: Entity?) = true
|
||||
|
||||
override fun sendPacket(packet: Packet<*>?) = Unit
|
||||
}
|
||||
|
@ -113,7 +113,7 @@ class GravityExtractor : AbstractExtractor() {
|
||||
@ExtractorMethod("rotated_falling_5")
|
||||
fun rotatedFalling5() {
|
||||
player.teleport(45.0, 178.0, 13.0)
|
||||
player.rotate(23.0, 86.0)
|
||||
player.rotate(23.0f, 86.0f)
|
||||
player.setKeys(forwards = true)
|
||||
player.tick(5)
|
||||
storeMovement()
|
||||
@ -122,7 +122,7 @@ class GravityExtractor : AbstractExtractor() {
|
||||
@ExtractorMethod("rotated_falling_12")
|
||||
fun rotatedFalling12() {
|
||||
player.teleport(45.0, 178.0, 13.0)
|
||||
player.rotate(123.0, 23.0)
|
||||
player.rotate(123.0f, 23.0f)
|
||||
player.setKeys(backwards = true, left = true)
|
||||
player.tick(12)
|
||||
storeMovement()
|
||||
|
@ -24,7 +24,7 @@ class SpectatorExtractor : AbstractExtractor() {
|
||||
fun spectatorTest3() {
|
||||
player.teleport(12.0, 5.0, 12.0)
|
||||
player.setKeys(forwards = true, left = true)
|
||||
player.rotate(12.0, 60.0)
|
||||
player.rotate(12.0f, 60.0f)
|
||||
player.tick(10)
|
||||
storePosition()
|
||||
storeVelocity()
|
||||
@ -34,7 +34,7 @@ class SpectatorExtractor : AbstractExtractor() {
|
||||
fun spectatorTest4() {
|
||||
player.teleport(12.0, 5.0, -19.0)
|
||||
player.setKeys(forwards = true, right = true)
|
||||
player.rotate(12.0, 60.0)
|
||||
player.rotate(12.0f, 60.0f)
|
||||
player.tick(100)
|
||||
storePosition()
|
||||
storeVelocity()
|
||||
@ -45,7 +45,7 @@ class SpectatorExtractor : AbstractExtractor() {
|
||||
player.teleport(12.0, 5.0, -19.0)
|
||||
player.setKeys(forwards = true, right = true)
|
||||
player.flying = true
|
||||
player.rotate(12.0, 60.0)
|
||||
player.rotate(12.0f, 60.0f)
|
||||
player.tick(100)
|
||||
storePosition()
|
||||
storeVelocity()
|
||||
|
@ -56,7 +56,7 @@ abstract class AbstractWalkExtractor(private val state: BlockState) : AbstractEx
|
||||
protected fun walking6() {
|
||||
player.teleport(-6.0, 1.0, -6.0)
|
||||
player.setKeys(forwards = true)
|
||||
player.rotate(180.0, 0.0)
|
||||
player.rotate(180.0f, 0.0f)
|
||||
player.tick(10)
|
||||
storeMovement()
|
||||
}
|
||||
@ -64,7 +64,7 @@ abstract class AbstractWalkExtractor(private val state: BlockState) : AbstractEx
|
||||
protected fun walking7() {
|
||||
player.teleport(-6.0, 1.0, -6.0)
|
||||
player.setKeys(forwards = true)
|
||||
player.rotate(180.0, 0.0)
|
||||
player.rotate(180.0f, 0.0f)
|
||||
player.tick(50)
|
||||
storeMovement()
|
||||
}
|
||||
@ -72,13 +72,13 @@ abstract class AbstractWalkExtractor(private val state: BlockState) : AbstractEx
|
||||
protected fun walking8() {
|
||||
player.teleport(-6.0, 1.0, -6.0)
|
||||
player.setKeys(forwards = true)
|
||||
player.rotate(180.0, 0.0)
|
||||
player.rotate(180.0f, 0.0f)
|
||||
player.tick(10)
|
||||
player.rotate(90.0, 0.0)
|
||||
player.rotate(90.0f, 0.0f)
|
||||
player.tick(10)
|
||||
player.rotate(0.0, 0.0)
|
||||
player.rotate(0.0f, 0.0f)
|
||||
player.tick(10)
|
||||
player.rotate(270.0, 0.0)
|
||||
player.rotate(270.0f, 0.0f)
|
||||
player.tick(10)
|
||||
storeMovement()
|
||||
}
|
||||
@ -89,7 +89,7 @@ abstract class AbstractWalkExtractor(private val state: BlockState) : AbstractEx
|
||||
|
||||
for (x in 0..100) {
|
||||
player.tick()
|
||||
player.rotate(kotlin.math.sin(x / Math.PI / 100.0) * 400.0, 0.0)
|
||||
player.rotate(kotlin.math.sin(x / Math.PI.toFloat() / 100.0f) * 400.0f, 0.0f)
|
||||
}
|
||||
storeMovement()
|
||||
}
|
||||
@ -122,7 +122,7 @@ abstract class AbstractWalkExtractor(private val state: BlockState) : AbstractEx
|
||||
world.fill(-18, 3, 2, -10, 3, 10, Blocks.STONE.defaultState)
|
||||
world.fill(-16, 3, 4, -12, 3, 8, this.state)
|
||||
player.teleport(-15.653410032035934, 4.0, 8.580128352737571)
|
||||
player.rotate(180.29749, 22.493956)
|
||||
player.rotate(180.29749f, 22.493956f)
|
||||
player.tick(5)
|
||||
player.setKeys(sprint = true)
|
||||
player.tick(1)
|
||||
@ -135,7 +135,7 @@ abstract class AbstractWalkExtractor(private val state: BlockState) : AbstractEx
|
||||
world.fill(-18, 3, 2, -10, 3, 10, Blocks.STONE.defaultState)
|
||||
world.fill(-16, 3, 4, -12, 3, 8, this.state)
|
||||
player.teleport(-15.653410032035934, 4.0, 8.580128352737571)
|
||||
player.rotate(180.29749, 22.493956)
|
||||
player.rotate(180.29749f, 22.493956f)
|
||||
player.tick(5)
|
||||
player.setKeys(sprint = true)
|
||||
player.tick(1)
|
||||
|
@ -19,7 +19,7 @@ class RotatingExtractor : AbstractExtractor() {
|
||||
player.setKeys(forwards = true)
|
||||
for (x in 0..100) {
|
||||
player.tick()
|
||||
player.rotate(kotlin.math.sin(x / PI / 100.0) * 400.0, 0.0)
|
||||
player.rotate(kotlin.math.sin(x / PI.toFloat() / 100.0f) * 400.0f, 0.0f)
|
||||
}
|
||||
storePosition()
|
||||
storeVelocity()
|
||||
|
@ -128,7 +128,7 @@ class LevitationExtractor : AbstractExtractor() {
|
||||
player.teleport(12.0, 9.0, 4.0)
|
||||
player.applyLevitation(3)
|
||||
player.setKeys(true, left = true)
|
||||
player.rotate(140.0, 29.0)
|
||||
player.rotate(140.0f, 29.0f)
|
||||
player.tick(21)
|
||||
storeMovement()
|
||||
storeVelocity()
|
||||
@ -139,7 +139,7 @@ class LevitationExtractor : AbstractExtractor() {
|
||||
player.teleport(12.0, 9.0, 4.0)
|
||||
player.applyLevitation(3)
|
||||
player.setKeys(backwards = true, left = true)
|
||||
player.rotate(76.0, 29.0)
|
||||
player.rotate(76.0f, 29.0f)
|
||||
player.tick(21)
|
||||
storeMovement()
|
||||
storeVelocity()
|
||||
@ -150,7 +150,7 @@ class LevitationExtractor : AbstractExtractor() {
|
||||
player.teleport(7.0, 9.0, 4.0)
|
||||
player.applyLevitation(3)
|
||||
player.setKeys(backwards = true, right = true)
|
||||
player.rotate(1.0, 38.0)
|
||||
player.rotate(1.0f, 38.0f)
|
||||
player.tick(19)
|
||||
storeMovement()
|
||||
storeVelocity()
|
||||
|
@ -69,7 +69,7 @@ class SlowFallingExtractor : AbstractExtractor() {
|
||||
player.teleport(12.0, 9.0, 4.0)
|
||||
player.applySlowFalling()
|
||||
player.setKeys(true, left = true)
|
||||
player.rotate(112.0, 2.0)
|
||||
player.rotate(112.0f, 2.0f)
|
||||
player.tick(21)
|
||||
storeMovement()
|
||||
storeVelocity()
|
||||
@ -80,7 +80,7 @@ class SlowFallingExtractor : AbstractExtractor() {
|
||||
player.teleport(12.0, 9.0, 4.0)
|
||||
player.applySlowFalling()
|
||||
player.setKeys(backwards = true, left = true)
|
||||
player.rotate(87.0, 29.0)
|
||||
player.rotate(87.0f, 29.0f)
|
||||
player.tick(21)
|
||||
storeMovement()
|
||||
storeVelocity()
|
||||
@ -91,7 +91,7 @@ class SlowFallingExtractor : AbstractExtractor() {
|
||||
player.teleport(7.0, 9.0, 4.0)
|
||||
player.applySlowFalling()
|
||||
player.setKeys(backwards = true, right = true)
|
||||
player.rotate(1.0, 1.0)
|
||||
player.rotate(1.0f, 1.0f)
|
||||
player.tick(19)
|
||||
storeMovement()
|
||||
storeVelocity()
|
||||
|
@ -97,7 +97,7 @@ class SpeedExtractor : AbstractExtractor() {
|
||||
player.teleport(-10.0, 1.0, -11.0)
|
||||
player.applySpeed(1)
|
||||
player.setKeys(forwards = true)
|
||||
player.rotate(79.0, 4.0)
|
||||
player.rotate(79.0f, 4.0f)
|
||||
player.tick(50)
|
||||
storeMovement()
|
||||
storeVelocity()
|
||||
@ -108,7 +108,7 @@ class SpeedExtractor : AbstractExtractor() {
|
||||
player.teleport(-10.0, 1.0, -11.0)
|
||||
player.applySpeed(1)
|
||||
player.setKeys(forwards = true, jump = true)
|
||||
player.rotate(12.0, 4.0)
|
||||
player.rotate(12.0f, 4.0f)
|
||||
player.tick(50)
|
||||
storeMovement()
|
||||
storeVelocity()
|
||||
@ -119,7 +119,7 @@ class SpeedExtractor : AbstractExtractor() {
|
||||
player.teleport(-10.0, 1.0, -11.0)
|
||||
player.applySpeed(3)
|
||||
player.setKeys(forwards = true, jump = true)
|
||||
player.rotate(54.0, 4.0)
|
||||
player.rotate(54.0f, 4.0f)
|
||||
player.tick(37)
|
||||
storeMovement()
|
||||
storeVelocity()
|
||||
@ -130,7 +130,7 @@ class SpeedExtractor : AbstractExtractor() {
|
||||
player.teleport(-10.0, 1.0, -11.0)
|
||||
player.applySpeed(3)
|
||||
player.setKeys(forwards = true, jump = true, sprint = true)
|
||||
player.rotate(54.0, 4.0)
|
||||
player.rotate(54.0f, 4.0f)
|
||||
player.tick(33)
|
||||
storeMovement()
|
||||
storeVelocity()
|
||||
|
@ -0,0 +1,58 @@
|
||||
package de.bixilon.pixlyzer.physics.tests.riding
|
||||
|
||||
import de.bixilon.pixlyzer.physics.tests.ExtractorMethod
|
||||
import net.minecraft.entity.Entity
|
||||
import net.minecraft.entity.EntityType
|
||||
import net.minecraft.entity.vehicle.BoatEntity
|
||||
|
||||
class BoatExtractor : RidingExtractor() {
|
||||
|
||||
override fun construct(): Entity {
|
||||
return BoatEntity(EntityType.BOAT, world.native)
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun boatStartRiding() {
|
||||
super.startRiding()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun boatStartFalling() {
|
||||
super.startFalling()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun boatStartWalking1() {
|
||||
super.startWalking1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun boatStartWalking2() {
|
||||
super.startWalking2()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun boatWalkSideways1() {
|
||||
super.walkSideways1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun boatWalkSideways2() {
|
||||
super.walkSideways2()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun boatWalkUnsaddled() {
|
||||
super.walkUnsaddled()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun boatJump1() {
|
||||
super.jump1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun boatJump2() {
|
||||
super.jump2()
|
||||
}
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package de.bixilon.pixlyzer.physics.tests.riding
|
||||
|
||||
import de.bixilon.pixlyzer.physics.tests.ExtractorMethod
|
||||
import net.minecraft.entity.Entity
|
||||
import net.minecraft.entity.EntityType
|
||||
import net.minecraft.entity.passive.HorseEntity
|
||||
|
||||
class HorseExtractor : RidingExtractor() {
|
||||
|
||||
override fun construct(): Entity {
|
||||
return HorseEntity(EntityType.HORSE, world.native)
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun horseStartRiding() {
|
||||
super.startRiding()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun horseStartFalling() {
|
||||
super.startFalling()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun horseStartWalking1() {
|
||||
super.startWalking1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun horseStartWalking2() {
|
||||
super.startWalking2()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun horseWalkSideways1() {
|
||||
super.walkSideways1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun horseWalkSideways2() {
|
||||
super.walkSideways2()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun horseWalkUnsaddled() {
|
||||
super.walkUnsaddled()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun horseJump1() {
|
||||
super.jump1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun horseJump2() {
|
||||
super.jump2()
|
||||
}
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package de.bixilon.pixlyzer.physics.tests.riding
|
||||
|
||||
import de.bixilon.pixlyzer.physics.tests.ExtractorMethod
|
||||
import net.minecraft.entity.Entity
|
||||
import net.minecraft.entity.EntityType
|
||||
import net.minecraft.entity.vehicle.MinecartEntity
|
||||
|
||||
class MinecartExtractor : RidingExtractor() {
|
||||
|
||||
override fun construct(): Entity {
|
||||
return MinecartEntity(EntityType.MINECART, world.native)
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun minecartStartRiding() {
|
||||
super.startRiding()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun minecartStartFalling() {
|
||||
super.startFalling()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun minecartStartWalking1() {
|
||||
super.startWalking1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun minecartStartWalking2() {
|
||||
super.startWalking2()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun minecartWalkSideways1() {
|
||||
super.walkSideways1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun minecartWalkSideways2() {
|
||||
super.walkSideways2()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun minecartWalkUnsaddled() {
|
||||
super.walkUnsaddled()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun minecartJump1() {
|
||||
super.jump1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun minecartJump2() {
|
||||
super.jump2()
|
||||
}
|
||||
}
|
@ -0,0 +1,101 @@
|
||||
package de.bixilon.pixlyzer.physics.tests.riding
|
||||
|
||||
import de.bixilon.pixlyzer.physics.tests.ExtractorMethod
|
||||
import net.minecraft.block.Blocks
|
||||
import net.minecraft.entity.Entity
|
||||
import net.minecraft.entity.EntityType
|
||||
import net.minecraft.entity.EquipmentSlot
|
||||
import net.minecraft.entity.passive.PigEntity
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.item.Items
|
||||
|
||||
class PigRidingExtractor : RidingExtractor() {
|
||||
|
||||
override fun construct(): Entity {
|
||||
return PigEntity(EntityType.PIG, world.native)
|
||||
}
|
||||
|
||||
|
||||
@ExtractorMethod
|
||||
fun pigStartRiding() {
|
||||
super.startRiding()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun pigStartFalling() {
|
||||
super.startFalling()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun pigStartWalking1() {
|
||||
super.startWalking1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun pigStartWalking2() {
|
||||
super.startWalking2()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun pigWalkSideways1() {
|
||||
super.walkSideways1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun pigWalkSideways2() {
|
||||
super.walkSideways2()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun pigWalkUnsaddled() {
|
||||
super.walkUnsaddled()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun pigJump1() {
|
||||
super.jump1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun pigJump2() {
|
||||
super.jump2()
|
||||
}
|
||||
|
||||
private fun addCarrotOnStick() {
|
||||
val stack = ItemStack(Items.CARROT_ON_A_STICK)
|
||||
player.native.equipStack(EquipmentSlot.MAINHAND, stack)
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun pigCarrotOnStick1() {
|
||||
player.teleport(6.0, 5.0, 4.0)
|
||||
val vehicle = createEntity(true)
|
||||
vehicle.teleport(7.0, 6.0, 5.0)
|
||||
player.startRiding(vehicle)
|
||||
|
||||
addCarrotOnStick()
|
||||
|
||||
tick(10)
|
||||
|
||||
|
||||
storeMovement()
|
||||
vehicle.storeMovement()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun pigCarrotOnStick2() {
|
||||
player.teleport(6.0, 5.0, 4.0)
|
||||
val vehicle = createEntity(true)
|
||||
vehicle.teleport(7.0, 6.0, 5.0)
|
||||
world.fill(-10, 4, -10, 10, 4, 10, Blocks.STONE.defaultState)
|
||||
player.startRiding(vehicle)
|
||||
|
||||
addCarrotOnStick()
|
||||
|
||||
tick(20)
|
||||
|
||||
|
||||
storeMovement()
|
||||
vehicle.storeMovement()
|
||||
}
|
||||
}
|
@ -0,0 +1,182 @@
|
||||
package de.bixilon.pixlyzer.physics.tests.riding
|
||||
|
||||
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
||||
import de.bixilon.kutil.json.MutableJsonObject
|
||||
import de.bixilon.pixlyzer.physics.abstractions.MinecraftVehicle
|
||||
import de.bixilon.pixlyzer.physics.tests.AbstractExtractor
|
||||
import net.minecraft.block.Blocks
|
||||
import net.minecraft.entity.Entity
|
||||
import net.minecraft.entity.Saddleable
|
||||
|
||||
abstract class RidingExtractor : AbstractExtractor() {
|
||||
|
||||
|
||||
abstract fun construct(): Entity
|
||||
|
||||
protected fun createEntity(saddle: Boolean = true): MinecraftVehicle<Entity> {
|
||||
val native = construct()
|
||||
if (saddle && native is Saddleable) {
|
||||
native.saddle(null)
|
||||
}
|
||||
return MinecraftVehicle(native.unsafeCast())
|
||||
}
|
||||
|
||||
protected fun MinecraftVehicle<*>.storeMovement() {
|
||||
val json: MutableJsonObject = mutableMapOf()
|
||||
json["position"] = listOf(native.x, native.y, native.z)
|
||||
json["velocity"] = listOf(native.velocity.x, native.velocity.y, native.velocity.z)
|
||||
if (native.onGround) {
|
||||
json["on_ground"] = true
|
||||
}
|
||||
|
||||
result["vehicle"] = json
|
||||
}
|
||||
|
||||
protected fun tick(count: Int = 1) {
|
||||
for (i in 0 until count) {
|
||||
player.native.vehicle?.let { world.native.tickEntity(it) } ?: world.native.tickEntity(player.native)
|
||||
}
|
||||
}
|
||||
|
||||
protected fun startRiding() {
|
||||
player.teleport(6.0, 5.0, 4.0)
|
||||
val vehicle = createEntity(true)
|
||||
vehicle.teleport(7.0, 6.0, 5.0)
|
||||
player.startRiding(vehicle)
|
||||
|
||||
storeMovement()
|
||||
vehicle.storeMovement()
|
||||
}
|
||||
|
||||
protected fun startFalling() {
|
||||
player.teleport(6.0, 5.0, 4.0)
|
||||
val vehicle = createEntity(true)
|
||||
vehicle.teleport(7.0, 6.0, 5.0)
|
||||
player.startRiding(vehicle)
|
||||
|
||||
tick(10)
|
||||
|
||||
storeMovement()
|
||||
vehicle.storeMovement()
|
||||
}
|
||||
|
||||
protected fun startWalking1() {
|
||||
player.teleport(6.0, 5.0, 4.0)
|
||||
val vehicle = createEntity(true)
|
||||
vehicle.teleport(7.0, 6.0, 5.0)
|
||||
player.startRiding(vehicle)
|
||||
player.setKeys(forwards = true)
|
||||
|
||||
tick(10)
|
||||
|
||||
|
||||
storeMovement()
|
||||
vehicle.storeMovement()
|
||||
}
|
||||
|
||||
protected fun startWalking2() {
|
||||
player.teleport(6.0, 5.0, 4.0)
|
||||
world.fill(-10, 4, -10, 10, 4, 10, Blocks.STONE.defaultState)
|
||||
val vehicle = createEntity(true)
|
||||
vehicle.teleport(7.0, 6.0, 5.0)
|
||||
player.startRiding(vehicle)
|
||||
player.setKeys(forwards = true)
|
||||
|
||||
tick(15)
|
||||
|
||||
|
||||
storeMovement()
|
||||
vehicle.storeMovement()
|
||||
}
|
||||
|
||||
protected fun walkSideways1() {
|
||||
player.teleport(6.0, 5.0, 4.0)
|
||||
world.fill(-10, 4, -10, 10, 4, 10, Blocks.STONE.defaultState)
|
||||
val vehicle = createEntity(true)
|
||||
vehicle.teleport(7.0, 6.0, 5.0)
|
||||
player.startRiding(vehicle)
|
||||
player.setKeys(left = true)
|
||||
|
||||
tick(12)
|
||||
|
||||
|
||||
storeMovement()
|
||||
vehicle.storeMovement()
|
||||
}
|
||||
|
||||
protected fun walkSideways2() {
|
||||
player.teleport(6.0, 5.0, 4.0)
|
||||
world.fill(-10, 4, -10, 10, 4, 10, Blocks.STONE.defaultState)
|
||||
val vehicle = createEntity(true)
|
||||
vehicle.teleport(7.0, 6.0, 5.0)
|
||||
player.startRiding(vehicle)
|
||||
player.setKeys(left = true, forwards = true)
|
||||
|
||||
tick(16)
|
||||
|
||||
|
||||
storeMovement()
|
||||
vehicle.storeMovement()
|
||||
}
|
||||
|
||||
protected fun walkBackwards() {
|
||||
player.teleport(6.0, 5.0, 4.0)
|
||||
world.fill(-10, 4, -10, 10, 4, 10, Blocks.STONE.defaultState)
|
||||
val vehicle = createEntity(true)
|
||||
vehicle.teleport(7.0, 6.0, 5.0)
|
||||
player.startRiding(vehicle)
|
||||
player.setKeys(backwards = true)
|
||||
|
||||
tick(11)
|
||||
|
||||
|
||||
storeMovement()
|
||||
vehicle.storeMovement()
|
||||
}
|
||||
|
||||
protected fun walkUnsaddled() {
|
||||
player.teleport(6.0, 5.0, 4.0)
|
||||
world.fill(-10, 4, -10, 10, 4, 10, Blocks.STONE.defaultState)
|
||||
val vehicle = createEntity(false)
|
||||
vehicle.teleport(7.0, 6.0, 5.0)
|
||||
player.startRiding(vehicle)
|
||||
player.setKeys(forwards = true)
|
||||
|
||||
tick(18)
|
||||
|
||||
|
||||
storeMovement()
|
||||
vehicle.storeMovement()
|
||||
}
|
||||
|
||||
protected fun jump1() {
|
||||
player.teleport(6.0, 5.0, 4.0)
|
||||
world.fill(-10, 4, -10, 10, 4, 10, Blocks.STONE.defaultState)
|
||||
val vehicle = createEntity(true)
|
||||
vehicle.teleport(7.0, 6.0, 5.0)
|
||||
player.startRiding(vehicle)
|
||||
player.setKeys(forwards = true, jump = true)
|
||||
|
||||
tick(18)
|
||||
|
||||
|
||||
storeMovement()
|
||||
vehicle.storeMovement()
|
||||
}
|
||||
|
||||
protected fun jump2() {
|
||||
player.teleport(6.0, 5.0, 4.0)
|
||||
world.fill(-10, 4, -10, 10, 4, 10, Blocks.STONE.defaultState)
|
||||
val vehicle = createEntity(true)
|
||||
vehicle.teleport(7.0, 6.0, 5.0)
|
||||
player.startRiding(vehicle)
|
||||
player.setKeys(forwards = true, jump = true)
|
||||
tick(18)
|
||||
player.setKeys(forwards = true)
|
||||
tick(3)
|
||||
|
||||
|
||||
storeMovement()
|
||||
vehicle.storeMovement()
|
||||
}
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package de.bixilon.pixlyzer.physics.tests.riding
|
||||
|
||||
import de.bixilon.pixlyzer.physics.tests.ExtractorMethod
|
||||
import net.minecraft.entity.Entity
|
||||
import net.minecraft.entity.EntityType
|
||||
import net.minecraft.entity.mob.SpiderEntity
|
||||
|
||||
class SpiderExtractor : RidingExtractor() {
|
||||
|
||||
override fun construct(): Entity {
|
||||
return SpiderEntity(EntityType.SPIDER, world.native)
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun spiderStartRiding() {
|
||||
super.startRiding()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun spiderStartFalling() {
|
||||
super.startFalling()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun spiderStartWalking1() {
|
||||
super.startWalking1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun spiderStartWalking2() {
|
||||
super.startWalking2()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun spiderWalkSideways1() {
|
||||
super.walkSideways1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun spiderWalkSideways2() {
|
||||
super.walkSideways2()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun spiderWalkUnsaddled() {
|
||||
super.walkUnsaddled()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun spiderJump1() {
|
||||
super.jump1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun spiderJump2() {
|
||||
super.jump2()
|
||||
}
|
||||
}
|
@ -0,0 +1,100 @@
|
||||
package de.bixilon.pixlyzer.physics.tests.riding
|
||||
|
||||
import de.bixilon.pixlyzer.physics.tests.ExtractorMethod
|
||||
import net.minecraft.block.Blocks
|
||||
import net.minecraft.entity.Entity
|
||||
import net.minecraft.entity.EntityType
|
||||
import net.minecraft.entity.EquipmentSlot
|
||||
import net.minecraft.entity.passive.StriderEntity
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.item.Items
|
||||
|
||||
class StriderExtractor : RidingExtractor() {
|
||||
|
||||
override fun construct(): Entity {
|
||||
return StriderEntity(EntityType.STRIDER, world.native)
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun striderStartRiding() {
|
||||
super.startRiding()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun striderStartFalling() {
|
||||
super.startFalling()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun striderStartWalking1() {
|
||||
super.startWalking1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun striderStartWalking2() {
|
||||
super.startWalking2()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun striderWalkSideways1() {
|
||||
super.walkSideways1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun striderWalkSideways2() {
|
||||
super.walkSideways2()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun striderWalkUnsaddled() {
|
||||
super.walkUnsaddled()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun striderJump1() {
|
||||
super.jump1()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun striderJump2() {
|
||||
super.jump2()
|
||||
}
|
||||
|
||||
private fun addWarpedFungusOnAStick() {
|
||||
val stack = ItemStack(Items.WARPED_FUNGUS_ON_A_STICK)
|
||||
player.native.equipStack(EquipmentSlot.MAINHAND, stack)
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun stiderOnStick1() {
|
||||
player.teleport(6.0, 5.0, 4.0)
|
||||
val vehicle = createEntity(true)
|
||||
vehicle.teleport(7.0, 6.0, 5.0)
|
||||
player.startRiding(vehicle)
|
||||
|
||||
addWarpedFungusOnAStick()
|
||||
|
||||
tick(10)
|
||||
|
||||
|
||||
storeMovement()
|
||||
vehicle.storeMovement()
|
||||
}
|
||||
|
||||
@ExtractorMethod
|
||||
fun stiderOnStick2() {
|
||||
player.teleport(6.0, 5.0, 4.0)
|
||||
val vehicle = createEntity(true)
|
||||
vehicle.teleport(7.0, 6.0, 5.0)
|
||||
world.fill(-10, 4, -10, 10, 4, 10, Blocks.STONE.defaultState)
|
||||
player.startRiding(vehicle)
|
||||
|
||||
addWarpedFungusOnAStick()
|
||||
|
||||
tick(20)
|
||||
|
||||
|
||||
storeMovement()
|
||||
vehicle.storeMovement()
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user