From fe56ab8d3e6f6519c7cbf9e0ddd793106bd67148 Mon Sep 17 00:00:00 2001 From: ImUrX Date: Sat, 8 Feb 2020 16:18:56 -0300 Subject: [PATCH 1/4] overwrite getMaxNetherPortalTime --- src/main/java/carpet/CarpetSettings.java | 27 ++++++++++++++++--- .../java/carpet/mixins/PlayerEntityMixin.java | 22 ++++++--------- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/main/java/carpet/CarpetSettings.java b/src/main/java/carpet/CarpetSettings.java index b07f7195..26cc4c47 100644 --- a/src/main/java/carpet/CarpetSettings.java +++ b/src/main/java/carpet/CarpetSettings.java @@ -50,11 +50,30 @@ public class CarpetSettings public static boolean superSecretSetting = false; @Rule( - desc = "Portals won't let a creative player go through instantly", - extra = "Holding obsidian in either hand won't let you through at all", - category = CREATIVE + desc = "Modify the amount of ticks for entering a Nether portal in creative", + options = {"1", "40", "80", "72000"}, + category = CREATIVE, + strict = false, + validate = NetherPortalDelayLimit.class ) - public static boolean portalCreativeDelay = false; + public static int portalCreativeDelay = 1; + + @Rule( + desc = "Modify the amount of ticks for entering a Nether portal in survival", + options = {"1", "40", "80", "72000"}, + category = SURVIVAL, + strict = false, + validate = NetherPortalDelayLimit.class + ) + public static int portalSurvivalDelay = 80; + + private static class NetherPortalDelayLimit extends Validator { + @Override public Integer validate(ServerCommandSource source, ParsedRule currentRule, Integer newValue, String string) { + return (newValue > 0 && newValue <= 72000) ? newValue : null; + } + @Override + public String description() { return "You must choose a value from 1 to 72000";} + } @Rule(desc = "Dropping entire stacks works also from on the crafting UI result slot", category = {BUGFIX, SURVIVAL}) public static boolean ctrlQCraftingFix = false; diff --git a/src/main/java/carpet/mixins/PlayerEntityMixin.java b/src/main/java/carpet/mixins/PlayerEntityMixin.java index d72cddb8..e8a3292d 100644 --- a/src/main/java/carpet/mixins/PlayerEntityMixin.java +++ b/src/main/java/carpet/mixins/PlayerEntityMixin.java @@ -1,23 +1,17 @@ package carpet.mixins; import carpet.CarpetSettings; -import carpet.helpers.PortalHelper; +import net.minecraft.entity.player.PlayerAbilities; import net.minecraft.entity.player.PlayerEntity; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.Constant; -import org.spongepowered.asm.mixin.injection.ModifyConstant; +import org.spongepowered.asm.mixin.Shadow; @Mixin(PlayerEntity.class) -public abstract class PlayerEntityMixin -{ - @ModifyConstant(method = "getMaxNetherPortalTime", - constant = @Constant(intValue = 1)) - private int addFillUpdatesInt(int original) { - if (CarpetSettings.portalCreativeDelay) - if (PortalHelper.player_holds_obsidian((PlayerEntity) (Object)this)) - return 72000; - else - return 80; - return original; +public abstract class PlayerEntityMixin { + @Shadow + public PlayerAbilities abilities; + + public int getMaxNetherPortalTime() { + return this.abilities.invulnerable ? CarpetSettings.portalCreativeDelay : CarpetSettings.portalSurvivalDelay; } } From a83088e685d03da0b6b456cacbeedd91f7c62ee5 Mon Sep 17 00:00:00 2001 From: ImUrX Date: Sat, 8 Feb 2020 16:49:39 -0300 Subject: [PATCH 2/4] use injections --- src/main/java/carpet/mixins/PlayerEntityMixin.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/carpet/mixins/PlayerEntityMixin.java b/src/main/java/carpet/mixins/PlayerEntityMixin.java index e8a3292d..698ffd5c 100644 --- a/src/main/java/carpet/mixins/PlayerEntityMixin.java +++ b/src/main/java/carpet/mixins/PlayerEntityMixin.java @@ -5,13 +5,22 @@ import net.minecraft.entity.player.PlayerAbilities; import net.minecraft.entity.player.PlayerEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.At; @Mixin(PlayerEntity.class) public abstract class PlayerEntityMixin { @Shadow public PlayerAbilities abilities; - public int getMaxNetherPortalTime() { - return this.abilities.invulnerable ? CarpetSettings.portalCreativeDelay : CarpetSettings.portalSurvivalDelay; + @Inject( + method = "getMaxNetherPortalTime()I", + at = @At("HEAD"), + cancellable = true + ) + public void onMaxNetherPortalTime(CallbackInfoReturnable cir) { + if(CarpetSettings.portalCreativeDelay != 1) cir.setReturnValue(CarpetSettings.portalCreativeDelay); + else if(CarpetSettings.portalSurvivalDelay != 80) cir.setReturnValue(CarpetSettings.portalSurvivalDelay); } } From d13ae34b1ebd798b25cf087812c93ce42c4a5c7c Mon Sep 17 00:00:00 2001 From: ImUrX Date: Sat, 8 Feb 2020 16:50:55 -0300 Subject: [PATCH 3/4] forgot about invulnerable --- src/main/java/carpet/mixins/PlayerEntityMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/carpet/mixins/PlayerEntityMixin.java b/src/main/java/carpet/mixins/PlayerEntityMixin.java index 698ffd5c..a994d710 100644 --- a/src/main/java/carpet/mixins/PlayerEntityMixin.java +++ b/src/main/java/carpet/mixins/PlayerEntityMixin.java @@ -20,7 +20,7 @@ public abstract class PlayerEntityMixin { cancellable = true ) public void onMaxNetherPortalTime(CallbackInfoReturnable cir) { - if(CarpetSettings.portalCreativeDelay != 1) cir.setReturnValue(CarpetSettings.portalCreativeDelay); + if(CarpetSettings.portalCreativeDelay != 1 && this.abilities.invulnerable) cir.setReturnValue(CarpetSettings.portalCreativeDelay); else if(CarpetSettings.portalSurvivalDelay != 80) cir.setReturnValue(CarpetSettings.portalSurvivalDelay); } } From a44b4439bc1478261120d9a76399be41aca05070 Mon Sep 17 00:00:00 2001 From: ImUrX Date: Sat, 8 Feb 2020 16:51:56 -0300 Subject: [PATCH 4/4] in both sides... --- src/main/java/carpet/mixins/PlayerEntityMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/carpet/mixins/PlayerEntityMixin.java b/src/main/java/carpet/mixins/PlayerEntityMixin.java index a994d710..39c7ab56 100644 --- a/src/main/java/carpet/mixins/PlayerEntityMixin.java +++ b/src/main/java/carpet/mixins/PlayerEntityMixin.java @@ -21,6 +21,6 @@ public abstract class PlayerEntityMixin { ) public void onMaxNetherPortalTime(CallbackInfoReturnable cir) { if(CarpetSettings.portalCreativeDelay != 1 && this.abilities.invulnerable) cir.setReturnValue(CarpetSettings.portalCreativeDelay); - else if(CarpetSettings.portalSurvivalDelay != 80) cir.setReturnValue(CarpetSettings.portalSurvivalDelay); + else if(CarpetSettings.portalSurvivalDelay != 80 && !this.abilities.invulnerable) cir.setReturnValue(CarpetSettings.portalSurvivalDelay); } }