From ad34845a6a452f5f9803c9d721a9e32e9556ebee Mon Sep 17 00:00:00 2001 From: Zippity Date: Tue, 19 Aug 2025 21:16:09 -0700 Subject: [PATCH 1/2] Fix grappling hook ladder death bug --- dependencies.gradle | 4 +++ .../AirFrictionControllerMixin.java | 31 +++++++++++++++++++ .../GrappleControllerMixin.java | 25 +++++++++++++++ src/main/resources/tfg.mixins.json | 2 ++ 4 files changed, 62 insertions(+) create mode 100644 src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/AirFrictionControllerMixin.java create mode 100644 src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/GrappleControllerMixin.java diff --git a/dependencies.gradle b/dependencies.gradle index 1ee4c62ea1..47ff4159b9 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -161,6 +161,10 @@ dependencies { // Simply Stacked Dimensions implementation fg.deobf("curse.maven:simply-stacked-dimensions-523416:5562948") { transitive = false } + // Grappling Hook -- needless dependencies are dumb + implementation fg.deobf("curse.maven:cloth-config-348521:5729105") + implementation fg.deobf("curse.maven:grappling-hook-mod-reforged-1166811:6028357") { transitive = false } + // Hang Glider implementation fg.deobf("maven.modrinth:puzzles-lib:${puzzleslib_version}") implementation fg.deobf("maven.modrinth:hang-glider:${hangglider_version}") diff --git a/src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/AirFrictionControllerMixin.java b/src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/AirFrictionControllerMixin.java new file mode 100644 index 0000000000..45f6947896 --- /dev/null +++ b/src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/AirFrictionControllerMixin.java @@ -0,0 +1,31 @@ +package su.terrafirmagreg.core.mixins.common.grappling_hook; + + +import com.llamalad7.mixinextras.sugar.Local; +import com.yyon.grapplinghook.controllers.AirfrictionController; +import com.yyon.grapplinghook.controllers.GrappleController; +import com.yyon.grapplinghook.utils.GrappleCustomization; +import com.yyon.grapplinghook.utils.Vec; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(value = AirfrictionController.class, remap = false) +public class AirFrictionControllerMixin extends GrappleController { + + public AirFrictionControllerMixin(int grapplehookEntityId, int entityId, Level world, Vec pos, int controllerid, GrappleCustomization custom) { + super(grapplehookEntityId, entityId, world, pos, controllerid, custom); + } + + @Inject(method = "updatePlayerPos", at = @At(value = "NEW", target = "(DDD)Lcom/yyon/grapplinghook/utils/Vec;", ordinal = 0), cancellable = true) + private void tfg$injectLadderFix(CallbackInfo ci, @Local Entity entity) { + if (entity instanceof LivingEntity living && living.onClimbable()) { + this.unattach(); + ci.cancel(); + } + } +} diff --git a/src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/GrappleControllerMixin.java b/src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/GrappleControllerMixin.java new file mode 100644 index 0000000000..0bdbf464c8 --- /dev/null +++ b/src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/GrappleControllerMixin.java @@ -0,0 +1,25 @@ +package su.terrafirmagreg.core.mixins.common.grappling_hook; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.yyon.grapplinghook.controllers.GrappleController; +import com.yyon.grapplinghook.utils.Vec; +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(value = GrappleController.class, remap = false) +public class GrappleControllerMixin { + @Shadow + public Vec motion; + + @Shadow + public Entity entity; + + @WrapOperation(method = "doubleJump", at = @At(value = "INVOKE", target = "Lcom/yyon/grapplinghook/utils/Vec;setMotion(Lnet/minecraft/world/entity/Entity;)V")) + private void tfg$resetFallDistanceOnDoubleJump(Vec instance, Entity e, Operation original) { + this.motion.setMotion(e); + e.resetFallDistance(); + } +} diff --git a/src/main/resources/tfg.mixins.json b/src/main/resources/tfg.mixins.json index 4dc3737e10..fb5d6c36d3 100644 --- a/src/main/resources/tfg.mixins.json +++ b/src/main/resources/tfg.mixins.json @@ -32,6 +32,8 @@ "common.firmalife.HydroponicPlanterBlockEntityMixin", "common.firmalife.MixinGreenhousePortBlock", "common.flywheel.AnimatedBlazeBurnerMixin", + "common.grappling_hook.AirFrictionControllerMixin", + "common.grappling_hook.GrappleControllerMixin", "common.greate.TieredCrushingCategoryMixin", "common.greate.TieredCrushingRecipeMixin", "common.greate.TieredMillingCategoryMixin", From bf865a0ef9d7ae97e9b2d26265c02a1ee5ed8ae8 Mon Sep 17 00:00:00 2001 From: Zippity Date: Tue, 19 Aug 2025 22:37:26 -0700 Subject: [PATCH 2/2] add licenses --- .../common/grappling_hook/AirFrictionControllerMixin.java | 5 +++++ .../mixins/common/grappling_hook/GrappleControllerMixin.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/AirFrictionControllerMixin.java b/src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/AirFrictionControllerMixin.java index 45f6947896..2c6643a7b8 100644 --- a/src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/AirFrictionControllerMixin.java +++ b/src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/AirFrictionControllerMixin.java @@ -1,3 +1,8 @@ +/* + * This file includes code from Grappling Hook - Reforged (https://www.curseforge.com/minecraft/mc-mods/grappling-hook-mod-reforged) + * Copyright (c) 2024 Chummycho + * Licensed under the GPLv3 License + */ package su.terrafirmagreg.core.mixins.common.grappling_hook; diff --git a/src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/GrappleControllerMixin.java b/src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/GrappleControllerMixin.java index 0bdbf464c8..5fa905ae2c 100644 --- a/src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/GrappleControllerMixin.java +++ b/src/main/java/su/terrafirmagreg/core/mixins/common/grappling_hook/GrappleControllerMixin.java @@ -1,3 +1,8 @@ +/* + * This file includes code from Grappling Hook - Reforged (https://www.curseforge.com/minecraft/mc-mods/grappling-hook-mod-reforged) + * Copyright (c) 2024 Chummycho + * Licensed under the GPLv3 License + */ package su.terrafirmagreg.core.mixins.common.grappling_hook; import com.llamalad7.mixinextras.injector.wrapoperation.Operation;