Skip to content

Commit

Permalink
Change blocking criteria for 1.21.2+
Browse files Browse the repository at this point in the history
  • Loading branch information
Provismet committed Jan 26, 2025
1 parent 618348f commit c891275
Showing 1 changed file with 18 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@
import com.llamalad7.mixinextras.sugar.Local;
import com.provismet.CombatPlusCore.interfaces.BlockingItem;
import com.provismet.CombatPlusCore.utility.CPCCallbackUtil;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.item.Item;
import net.minecraft.registry.tag.DamageTypeTags;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.Hand;
import net.minecraft.util.math.Vec3d;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
Expand Down Expand Up @@ -59,7 +60,7 @@ private void applyBlockerItemEffects (LivingEntity attacker, CallbackInfo info)
}
}

@Inject(method="getBlockingItem", at= @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getItem()Lnet/minecraft/item/Item;", shift=At.Shift.AFTER), cancellable=true)
@Inject(method="getBlockingItem", at=@At(value="INVOKE", target="Lnet/minecraft/item/ItemStack;getItem()Lnet/minecraft/item/Item;", shift=At.Shift.AFTER), cancellable=true)
private void allowBlockingItems (CallbackInfoReturnable<ItemStack> cir) {
Item activeItem = this.activeItemStack.getItem();
LivingEntity thisEntity = (LivingEntity)(Object)this;
Expand All @@ -69,4 +70,18 @@ private void allowBlockingItems (CallbackInfoReturnable<ItemStack> cir) {
cir.setReturnValue(this.activeItemStack);
}
}

@Inject(method="blockedByShield", at=@At(value= "INVOKE_ASSIGN", target="Lnet/minecraft/entity/LivingEntity;getBlockingItem()Lnet/minecraft/item/ItemStack;", shift=At.Shift.AFTER), cancellable=true)
private void canBlockWithBlockingItem (DamageSource source, CallbackInfoReturnable<Boolean> cir, @Local boolean pierceProjectile, @Local ItemStack blockingItem) {
// Recreates the vanilla method to not rely on shields (seriously why did Mojang think to do that?)
if (blockingItem != null && blockingItem.getItem() instanceof BlockingItem && !source.isIn(DamageTypeTags.BYPASSES_SHIELD) && !pierceProjectile) {
Vec3d vec3d = source.getPosition();
if (vec3d != null) {
Vec3d vec3d2 = this.getRotationVector(0f, this.getHeadYaw());
Vec3d vec3d3 = vec3d.relativize(this.getPos());
vec3d3 = new Vec3d(vec3d3.x, 0.0, vec3d3.z).normalize();
cir.setReturnValue(vec3d3.dotProduct(vec3d2) < 0.0);
}
}
}
}

0 comments on commit c891275

Please sign in to comment.