From d92b47d0ef81a13130338cf56d08b8e91b44418e Mon Sep 17 00:00:00 2001 From: IThundxr Date: Sun, 24 Nov 2024 11:46:20 -0500 Subject: [PATCH] Box in the vents - Make the player hitbox smaller when hiding as a box and allow them to go into 1x1 spaces --- build.gradle | 9 ++++++++- gradle.properties | 1 + .../equipment/armor/CardboardArmorHandler.java | 11 ++++++++++- .../create/foundation/mixin/EntityMixin.java | 14 ++++++++++++-- src/main/resources/create.mixins.json | 1 + 5 files changed, 32 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index e61210d3b7..a2cce5cff6 100644 --- a/build.gradle +++ b/build.gradle @@ -85,10 +85,11 @@ minecraft { property 'forge.logging.markers', '' property 'forge.logging.console.level', 'info' - jvmArgs '-XX:+IgnoreUnrecognizedVMOptions', '-XX:+AllowEnhancedClassRedefinition' // uncomment with jbr + jvmArgs '-XX:+IgnoreUnrecognizedVMOptions', '-XX:+AllowEnhancedClassRedefinition' //jvmArgs("-XX:-OmitStackTraceInFastThrow") // uncomment when you get exceptions with null messages etc //jvmArgs '-XX:+UnlockCommercialFeatures' // uncomment for profiling + property 'mixin.debug.export', 'true' property 'mixin.env.remapRefMap', 'true' property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" @@ -234,6 +235,10 @@ dependencies { jarJar.ranged(it, '[0.7.5,)') } + implementation(jarJar("io.github.llamalad7:mixinextras-forge:${mixin_extras_version}")) { + jarJar.ranged(it, "[${mixin_extras_version},)") + } + implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}") compileOnly fg.deobf("dev.engine_room.flywheel:flywheel-forge-api-${flywheel_minecraft_version}:${flywheel_version}") @@ -253,6 +258,8 @@ dependencies { implementation fg.deobf("net.createmod.ponder:Ponder-Forge-${minecraft_version}:${ponder_version}") } + compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:${mixin_extras_version}")) + compileOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}-common-api:${jei_version}") compileOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}-forge-api:${jei_version}") runtimeOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}-forge:${jei_version}") diff --git a/gradle.properties b/gradle.properties index 2a78b40f28..5ef9b99f7c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -30,6 +30,7 @@ curios_minecraft_version = 1.20.1 curios_version = 5.3.1 catnip_version = 0.8.20 ponder_version = 0.8.12 +mixin_extras_version = 0.4.1 cc_tweaked_enable = true cc_tweaked_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/CardboardArmorHandler.java b/src/main/java/com/simibubi/create/content/equipment/armor/CardboardArmorHandler.java index ecdc242952..233afc3e34 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/CardboardArmorHandler.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/CardboardArmorHandler.java @@ -6,6 +6,7 @@ import com.simibubi.create.AllItems; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; @@ -13,15 +14,23 @@ import net.minecraft.world.entity.NeutralMob; import net.minecraft.world.entity.Pose; import net.minecraft.world.entity.ai.goal.target.TargetGoal; import net.minecraft.world.entity.player.Player; +import net.minecraftforge.event.entity.EntityEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingTickEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingVisibilityEvent; -import net.minecraftforge.event.level.NoteBlockEvent.Play; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; @EventBusSubscriber public class CardboardArmorHandler { + @SubscribeEvent + public static void playerHitboxChangesWhenHidingAsBox(EntityEvent.Size event) { + if (event.getEntity().isAddedToWorld() && testForStealth(event.getEntity())) { + event.setNewSize(EntityDimensions.fixed(0.8F, 0.8F)); + event.setNewEyeHeight(0.6F); + } + } + @SubscribeEvent public static void playersStealthWhenWearingCardboard(LivingVisibilityEvent event) { LivingEntity entity = event.getEntity(); diff --git a/src/main/java/com/simibubi/create/foundation/mixin/EntityMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/EntityMixin.java index 45728dcfe5..e9383a7062 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/EntityMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/EntityMixin.java @@ -1,5 +1,12 @@ package com.simibubi.create.foundation.mixin; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; + +import com.llamalad7.mixinextras.sugar.Local; +import com.simibubi.create.content.equipment.armor.CardboardArmorHandler; + +import net.minecraft.world.entity.Pose; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -11,7 +18,11 @@ import net.minecraft.world.entity.Entity; @Mixin(value = Entity.class, priority = 900) public class EntityMixin { - + @ModifyExpressionValue(method = "canEnterPose", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;noCollision(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/AABB;)Z")) + public boolean create$playerHidingAsBoxIsCrouchingNotSwimming(boolean original, @Local(argsOnly = true) Pose pose) { + return original || (pose == Pose.CROUCHING && CardboardArmorHandler.testForStealth((Entity) (Object) this)); + } + @Inject(method = "fireImmune()Z", at = @At("RETURN"), cancellable = true) public void create$onFireImmune(CallbackInfoReturnable cir) { if (!cir.getReturnValueZ()) { @@ -21,5 +32,4 @@ public class EntityMixin { cir.setReturnValue(immune); } } - } diff --git a/src/main/resources/create.mixins.json b/src/main/resources/create.mixins.json index b0f46c966b..f5704cff09 100644 --- a/src/main/resources/create.mixins.json +++ b/src/main/resources/create.mixins.json @@ -15,6 +15,7 @@ "LavaSwimmingMixin", "MainMixin", "MapItemSavedDataMixin", + "PlayerMixin", "TestCommandMixin", "WaterWheelFluidSpreadMixin", "accessor.AbstractProjectileDispenseBehaviorAccessor",