Skip to content

Commit 3406d2e

Browse files
committed
Fix spears not working with Hitboxes
Issue came from the new AttackRangeComponent, which overrides the hitbox margin for weapons that have it (only spears by default)
1 parent fc55251 commit 3406d2e

4 files changed

Lines changed: 68 additions & 0 deletions

File tree

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client).
3+
* Copyright (c) Meteor Development.
4+
*/
5+
6+
package meteordevelopment.meteorclient.mixin;
7+
8+
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
9+
import meteordevelopment.meteorclient.systems.modules.Modules;
10+
import meteordevelopment.meteorclient.systems.modules.combat.Hitboxes;
11+
import net.minecraft.component.type.AttackRangeComponent;
12+
import net.minecraft.entity.LivingEntity;
13+
import net.minecraft.util.math.Vec3d;
14+
import org.objectweb.asm.Opcodes;
15+
import org.spongepowered.asm.mixin.Mixin;
16+
import org.spongepowered.asm.mixin.injection.At;
17+
18+
import java.util.function.ToDoubleFunction;
19+
20+
@Mixin(AttackRangeComponent.class)
21+
public class AttackRangeComponentMixin {
22+
@ModifyExpressionValue(method = "isWithinRange(Lnet/minecraft/entity/LivingEntity;Ljava/util/function/ToDoubleFunction;D)Z", at = @At(value = "FIELD", target = "Lnet/minecraft/component/type/AttackRangeComponent;hitboxMargin:F", opcode = Opcodes.GETFIELD))
23+
private float modifyHitboxMargin(float original, LivingEntity entity, ToDoubleFunction<Vec3d> squaredDistanceFunction, double extraHitboxMargin) {
24+
float v = (float) Modules.get().get(Hitboxes.class).getEntityValue(entity);
25+
return original + v;
26+
}
27+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client).
3+
* Copyright (c) Meteor Development.
4+
*/
5+
6+
package meteordevelopment.meteorclient.mixin;
7+
8+
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
9+
import com.llamalad7.mixinextras.sugar.Local;
10+
import meteordevelopment.meteorclient.systems.modules.Modules;
11+
import meteordevelopment.meteorclient.systems.modules.combat.Hitboxes;
12+
import net.minecraft.entity.Entity;
13+
import net.minecraft.entity.projectile.ProjectileUtil;
14+
import net.minecraft.util.math.Box;
15+
import org.spongepowered.asm.mixin.Mixin;
16+
import org.spongepowered.asm.mixin.injection.At;
17+
18+
@Mixin(ProjectileUtil.class)
19+
public class ProjectileUtilMixin {
20+
@ModifyExpressionValue(
21+
method = "collectPiercingCollisions(Lnet/minecraft/world/World;Lnet/minecraft/entity/Entity;Lnet/minecraft/util/math/Vec3d;Lnet/minecraft/util/math/Vec3d;Lnet/minecraft/util/math/Box;Ljava/util/function/Predicate;FLnet/minecraft/world/RaycastContext$ShapeType;Z)Ljava/util/Collection;",
22+
at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getBoundingBox()Lnet/minecraft/util/math/Box;")
23+
)
24+
private static Box modifyHitboxMargin(Box original, @Local(ordinal = 1) Entity entity2) {
25+
double v = Modules.get().get(Hitboxes.class).getEntityValue(entity2);
26+
if (v == 0) return original;
27+
28+
return original.expand(v);
29+
}
30+
}

src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Hitboxes.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,14 @@ public class Hitboxes extends Module {
9898
.build()
9999
);
100100

101+
private final Setting<Boolean> spear = sgWeapon.add(new BoolSetting.Builder()
102+
.name("spear")
103+
.description("Enable when holding a spear.")
104+
.defaultValue(true)
105+
.visible(onlyOnWeapon::get)
106+
.build()
107+
);
108+
101109
public Hitboxes() {
102110
super(Categories.Combat, "hitboxes", "Expands an entity's hitboxes.");
103111
}
@@ -117,6 +125,7 @@ private boolean testWeapon() {
117125
if (shovel.get() && itemStack.isIn(ItemTags.SHOVELS)) return true;
118126
if (hoe.get() && itemStack.isIn(ItemTags.HOES)) return true;
119127
if (mace.get() && itemStack.getItem() instanceof MaceItem) return true;
128+
if (spear.get() && itemStack.isIn(ItemTags.SPEARS)) return true;
120129
return false;
121130
});
122131
}

src/main/resources/meteor-client.mixins.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"AbstractSignEditScreenAccessor",
1717
"AbstractSignEditScreenMixin",
1818
"ArmorFeatureRendererMixin",
19+
"AttackRangeComponentMixin",
1920
"BannerBlockEntityRendererMixin",
2021
"BeaconBlockEntityRendererMixin",
2122
"BeaconScreenMixin",
@@ -152,6 +153,7 @@
152153
"PlayerSkinProviderAccessor",
153154
"PowderSnowBlockMixin",
154155
"ProjectileInGroundAccessor",
156+
"ProjectileUtilMixin",
155157
"ProjectionMatrix2Accessor",
156158
"RaycastContextMixin",
157159
"RegistriesMixin",

0 commit comments

Comments
 (0)