From 6a4eda83e520e822113a3bd18c9044c5f4c3d5a6 Mon Sep 17 00:00:00 2001 From: fretuks Date: Sun, 9 Nov 2025 00:50:29 +0100 Subject: [PATCH] Added Evasion Chance to Agility --- .../fretux/ascend/event/ActivityEvents.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/main/java/net/fretux/ascend/event/ActivityEvents.java b/src/main/java/net/fretux/ascend/event/ActivityEvents.java index b7023d9..ebc22ec 100644 --- a/src/main/java/net/fretux/ascend/event/ActivityEvents.java +++ b/src/main/java/net/fretux/ascend/event/ActivityEvents.java @@ -3,6 +3,9 @@ package net.fretux.ascend.event; import net.fretux.ascend.AscendMod; import net.fretux.ascend.player.PlayerStatsProvider; import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; import net.minecraft.world.effect.MobEffectCategory; import net.minecraft.world.entity.npc.Villager; import net.minecraft.world.entity.player.Player; @@ -223,4 +226,36 @@ public class ActivityEvents { event.setAmount(baseDamage + bonus); }); } + + @SubscribeEvent + public static void onPlayerEvasion(LivingHurtEvent event) { + if (!(event.getEntity() instanceof Player player)) return; + if (player.level().isClientSide) return; + if (event.getAmount() <= 0) return; + player.getCapability(PlayerStatsProvider.PLAYER_STATS).ifPresent(stats -> { + int agility = stats.getAttributeLevel("agility"); + if (agility <= 0) return; + double evadeChance = Math.min(agility * 0.0005d, 0.05d); + if (player.getRandom().nextDouble() < evadeChance) { + float original = event.getAmount(); + event.setAmount(original * 0.1f); + if (player.level() instanceof ServerLevel serverLevel) { + for (int i = 0; i < 8; i++) { + double offsetX = (serverLevel.random.nextDouble() - 0.5) * 0.6; + double offsetY = serverLevel.random.nextDouble() * 1.5; + double offsetZ = (serverLevel.random.nextDouble() - 0.5) * 0.6; + serverLevel.sendParticles( + ParticleTypes.CLOUD, + player.getX() + offsetX, + player.getY() + offsetY, + player.getZ() + offsetZ, + 1, + 0, 0, 0, 0.0 + ); + } + } + player.playSound(SoundEvents.ENDERMAN_TELEPORT, 0.4f, 1.5f); + } + }); + } } \ No newline at end of file