From 5e1cb857545bf7e685167cfb03fe1409b83a0003 Mon Sep 17 00:00:00 2001 From: videogame hacker Date: Thu, 3 Feb 2022 22:09:18 +0000 Subject: [PATCH] Add a speed hack :) --- .../mixins/MixinClientPlayerEntity.java | 20 +++++++++++++++++++ .../kotlin/codes/som/hibiscus/HibiscusMod.kt | 2 -- .../codes/som/hibiscus/events/PlayerEvents.kt | 2 ++ .../som/hibiscus/features/FeatureList.kt | 2 ++ .../som/hibiscus/features/movement/Speed.kt | 19 ++++++++++++++++++ 5 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/codes/som/hibiscus/features/movement/Speed.kt diff --git a/src/main/java/codes/som/hibiscus/mixins/MixinClientPlayerEntity.java b/src/main/java/codes/som/hibiscus/mixins/MixinClientPlayerEntity.java index a1bb4ee..a0e874f 100644 --- a/src/main/java/codes/som/hibiscus/mixins/MixinClientPlayerEntity.java +++ b/src/main/java/codes/som/hibiscus/mixins/MixinClientPlayerEntity.java @@ -1,12 +1,17 @@ package codes.som.hibiscus.mixins; import codes.som.hibiscus.HibiscusMod; +import codes.som.hibiscus.events.MovePlayerEvent; import codes.som.hibiscus.events.PlayerTickEvent; import codes.som.hibiscus.events.SendChatEvent; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.entity.MovementType; +import net.minecraft.util.math.Vec3d; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ClientPlayerEntity.class) @@ -23,4 +28,19 @@ public abstract class MixinClientPlayerEntity { if (event.isCancelled()) ci.cancel(); } + + @Unique + private MovementType movementType; + + @Inject(method = "move", at = @At("HEAD")) + private void onMovePlayerWhatIsTheMovementType(MovementType type, Vec3d movement, CallbackInfo ci) { + this.movementType = type; + } + + @ModifyVariable(method = "move", at = @At(value = "HEAD", shift = At.Shift.AFTER), argsOnly = true) + private Vec3d onMovePlayer(Vec3d movement) { + var event = new MovePlayerEvent(movement.x, movement.y, movement.z, this.movementType); + HibiscusMod.bus().fire(event); + return new Vec3d(event.getX(), event.getY(), event.getZ()); + } } diff --git a/src/main/kotlin/codes/som/hibiscus/HibiscusMod.kt b/src/main/kotlin/codes/som/hibiscus/HibiscusMod.kt index f391c8a..3cea3e2 100644 --- a/src/main/kotlin/codes/som/hibiscus/HibiscusMod.kt +++ b/src/main/kotlin/codes/som/hibiscus/HibiscusMod.kt @@ -31,8 +31,6 @@ object HibiscusMod : ModInitializer { commands.register(feature.createFeatureCommand()) } - keybinds.register(GLFW.GLFW_KEY_R, "flight") - bus.register { event: KeyEvent -> if (event.key != GLFW_KEY_RIGHT_SHIFT || event.action != GLFW.GLFW_PRESS) return@register diff --git a/src/main/kotlin/codes/som/hibiscus/events/PlayerEvents.kt b/src/main/kotlin/codes/som/hibiscus/events/PlayerEvents.kt index 398f39d..62274c7 100644 --- a/src/main/kotlin/codes/som/hibiscus/events/PlayerEvents.kt +++ b/src/main/kotlin/codes/som/hibiscus/events/PlayerEvents.kt @@ -2,6 +2,8 @@ package codes.som.hibiscus.events import codes.som.hibiscus.api.event.Cancellable import codes.som.hibiscus.api.event.Event +import net.minecraft.entity.MovementType object PlayerTickEvent : Event class SendChatEvent(val message: String) : Cancellable(), Event +data class MovePlayerEvent(var x: Double, var y: Double, var z: Double, val movementType: MovementType) : Event diff --git a/src/main/kotlin/codes/som/hibiscus/features/FeatureList.kt b/src/main/kotlin/codes/som/hibiscus/features/FeatureList.kt index 098299d..e744d09 100644 --- a/src/main/kotlin/codes/som/hibiscus/features/FeatureList.kt +++ b/src/main/kotlin/codes/som/hibiscus/features/FeatureList.kt @@ -2,6 +2,7 @@ package codes.som.hibiscus.features import codes.som.hibiscus.api.feature.Feature import codes.som.hibiscus.features.movement.Flight +import codes.som.hibiscus.features.movement.Speed import codes.som.hibiscus.features.overlay.FeatureList import codes.som.hibiscus.features.player.NoFallDamage @@ -9,4 +10,5 @@ val ALL_FEATURES: Array<() -> Feature> = arrayOf( ::NoFallDamage, ::Flight, ::FeatureList, + ::Speed, ) diff --git a/src/main/kotlin/codes/som/hibiscus/features/movement/Speed.kt b/src/main/kotlin/codes/som/hibiscus/features/movement/Speed.kt new file mode 100644 index 0000000..0cdecf9 --- /dev/null +++ b/src/main/kotlin/codes/som/hibiscus/features/movement/Speed.kt @@ -0,0 +1,19 @@ +package codes.som.hibiscus.features.movement + +import codes.som.hibiscus.api.feature.Feature +import codes.som.hibiscus.api.feature.FeatureCategory +import codes.som.hibiscus.events.MovePlayerEvent +import net.minecraft.entity.MovementType + +class Speed : Feature("Speed", FeatureCategory.MOVEMENT) { + init { + val speed by values.float("Speed", 2f, 0.05f, 10f) + + on { event: MovePlayerEvent -> + if (event.movementType == MovementType.SELF) { + event.x *= speed + event.z *= speed + } + } + } +}