Add a speed hack :)
parent
085c1d14f4
commit
5e1cb85754
|
@ -1,12 +1,17 @@
|
||||||
package codes.som.hibiscus.mixins;
|
package codes.som.hibiscus.mixins;
|
||||||
|
|
||||||
import codes.som.hibiscus.HibiscusMod;
|
import codes.som.hibiscus.HibiscusMod;
|
||||||
|
import codes.som.hibiscus.events.MovePlayerEvent;
|
||||||
import codes.som.hibiscus.events.PlayerTickEvent;
|
import codes.som.hibiscus.events.PlayerTickEvent;
|
||||||
import codes.som.hibiscus.events.SendChatEvent;
|
import codes.som.hibiscus.events.SendChatEvent;
|
||||||
import net.minecraft.client.network.ClientPlayerEntity;
|
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.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
@Mixin(ClientPlayerEntity.class)
|
@Mixin(ClientPlayerEntity.class)
|
||||||
|
@ -23,4 +28,19 @@ public abstract class MixinClientPlayerEntity {
|
||||||
if (event.isCancelled())
|
if (event.isCancelled())
|
||||||
ci.cancel();
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,8 +31,6 @@ object HibiscusMod : ModInitializer {
|
||||||
commands.register(feature.createFeatureCommand())
|
commands.register(feature.createFeatureCommand())
|
||||||
}
|
}
|
||||||
|
|
||||||
keybinds.register(GLFW.GLFW_KEY_R, "flight")
|
|
||||||
|
|
||||||
bus.register { event: KeyEvent ->
|
bus.register { event: KeyEvent ->
|
||||||
if (event.key != GLFW_KEY_RIGHT_SHIFT || event.action != GLFW.GLFW_PRESS)
|
if (event.key != GLFW_KEY_RIGHT_SHIFT || event.action != GLFW.GLFW_PRESS)
|
||||||
return@register
|
return@register
|
||||||
|
|
|
@ -2,6 +2,8 @@ package codes.som.hibiscus.events
|
||||||
|
|
||||||
import codes.som.hibiscus.api.event.Cancellable
|
import codes.som.hibiscus.api.event.Cancellable
|
||||||
import codes.som.hibiscus.api.event.Event
|
import codes.som.hibiscus.api.event.Event
|
||||||
|
import net.minecraft.entity.MovementType
|
||||||
|
|
||||||
object PlayerTickEvent : Event
|
object PlayerTickEvent : Event
|
||||||
class SendChatEvent(val message: String) : Cancellable(), Event
|
class SendChatEvent(val message: String) : Cancellable(), Event
|
||||||
|
data class MovePlayerEvent(var x: Double, var y: Double, var z: Double, val movementType: MovementType) : Event
|
||||||
|
|
|
@ -2,6 +2,7 @@ package codes.som.hibiscus.features
|
||||||
|
|
||||||
import codes.som.hibiscus.api.feature.Feature
|
import codes.som.hibiscus.api.feature.Feature
|
||||||
import codes.som.hibiscus.features.movement.Flight
|
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.overlay.FeatureList
|
||||||
import codes.som.hibiscus.features.player.NoFallDamage
|
import codes.som.hibiscus.features.player.NoFallDamage
|
||||||
|
|
||||||
|
@ -9,4 +10,5 @@ val ALL_FEATURES: Array<() -> Feature> = arrayOf(
|
||||||
::NoFallDamage,
|
::NoFallDamage,
|
||||||
::Flight,
|
::Flight,
|
||||||
::FeatureList,
|
::FeatureList,
|
||||||
|
::Speed,
|
||||||
)
|
)
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue