From 0ad542236cc7cb09d87fafe39859f64d0475e120 Mon Sep 17 00:00:00 2001 From: gnembon Date: Thu, 7 May 2020 19:16:04 -0300 Subject: [PATCH] untested - creativeFlySpeed, creativeFlyDrag --- src/main/java/carpet/CarpetSettings.java | 14 ++++++++ .../LivingEntity_scarpetEventsMixin.java | 33 +++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/src/main/java/carpet/CarpetSettings.java b/src/main/java/carpet/CarpetSettings.java index c8c82b04..e7c7a5f6 100644 --- a/src/main/java/carpet/CarpetSettings.java +++ b/src/main/java/carpet/CarpetSettings.java @@ -69,6 +69,7 @@ public class CarpetSettings ) public static int portalSurvivalDelay = 80; + private static class OneHourMaxDelayLimit extends Validator { @Override public Integer validate(ServerCommandSource source, ParsedRule currentRule, Integer newValue, String string) { return (newValue > 0 && newValue <= 72000) ? newValue : null; @@ -586,4 +587,17 @@ public class CarpetSettings category = {CREATIVE, CLIENT} ) public static boolean creativeNoClip = false; + + + @Rule( + desc = "Creative flying speed multiplier", + category = {CREATIVE, CLIENT} + ) + public static double creativeFlySpeed = 1.0f; + + @Rule( + desc = "Creative air drag", + category = {CREATIVE, CLIENT} + ) + public static double creativeFlyDrag = 0.91f; } diff --git a/src/main/java/carpet/mixins/LivingEntity_scarpetEventsMixin.java b/src/main/java/carpet/mixins/LivingEntity_scarpetEventsMixin.java index 456b9b74..5d30edac 100644 --- a/src/main/java/carpet/mixins/LivingEntity_scarpetEventsMixin.java +++ b/src/main/java/carpet/mixins/LivingEntity_scarpetEventsMixin.java @@ -1,5 +1,6 @@ package carpet.mixins; +import carpet.CarpetSettings; import carpet.fakes.EntityInterface; import carpet.fakes.LivingEntityInterface; import carpet.script.EntityEventsGroup; @@ -7,12 +8,17 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Constant; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyConstant; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(LivingEntity.class) public abstract class LivingEntity_scarpetEventsMixin extends Entity implements LivingEntityInterface @@ -22,6 +28,8 @@ public abstract class LivingEntity_scarpetEventsMixin extends Entity implements @Shadow protected boolean jumping; + @Shadow public float flyingSpeed; + public LivingEntity_scarpetEventsMixin(EntityType type, World world) { super(type, world); @@ -44,4 +52,29 @@ public abstract class LivingEntity_scarpetEventsMixin extends Entity implements { return jumping; } + + + @ModifyConstant(method = "travel", constant = @Constant(floatValue = 0.91F), expect = 2) + private float drag(float original) + { + if ((Object)this instanceof PlayerEntity) + { + PlayerEntity self = (PlayerEntity)(Object)(this); + if (self.abilities.flying && !onGround) + return (float)CarpetSettings.creativeFlyDrag; + } + return original; + } + + + @Inject(method = "getMovementSpeed(F)F", at = @At("HEAD"), cancellable = true) + private void flyingAltSpeed(float slipperiness, CallbackInfoReturnable cir) + { + if ((Object)this instanceof PlayerEntity) + { + PlayerEntity self = (PlayerEntity)(Object)(this); + if (self.abilities.flying && !onGround) + cir.setReturnValue(flyingSpeed* (float)CarpetSettings.creativeFlySpeed); + } + } }