diff --git a/src/main/java/com/altnoir/mia/common/item/DebugAttributeTool.java b/src/main/java/com/altnoir/mia/common/item/DebugAttributeTool.java index d3a6ca61..f0d5b26b 100644 --- a/src/main/java/com/altnoir/mia/common/item/DebugAttributeTool.java +++ b/src/main/java/com/altnoir/mia/common/item/DebugAttributeTool.java @@ -62,10 +62,7 @@ public InteractionResultHolder use(Level level, Player player, Intera * 获取属性的最终值(包含所有修饰符) */ private double getFinalAttributeValue(Player player, Holder attribute) { - if (player.getAttribute(attribute) != null) { - return player.getAttribute(attribute).getValue(); - } - return 0.0; + return player.getAttributeValue(attribute); } /** diff --git a/src/main/java/com/altnoir/mia/core/event/EventHandle.java b/src/main/java/com/altnoir/mia/core/event/EventHandle.java index 033c6a62..66a0e791 100644 --- a/src/main/java/com/altnoir/mia/core/event/EventHandle.java +++ b/src/main/java/com/altnoir/mia/core/event/EventHandle.java @@ -28,6 +28,6 @@ public static void addGameEventBus(IEventBus gameEventBus) { gameEventBus.addListener(MiaEvents::onLivingDeath); gameEventBus.addListener(MiaEvents::onFinalizeSpawn); gameEventBus.addListener(MiaEvents::onLivingDrops); - //gameEventBus.addListener(MiaEvents::onLivingDamagePost); + gameEventBus.addListener(MiaEvents::onLivingDamagePre); } } \ No newline at end of file diff --git a/src/main/java/com/altnoir/mia/core/event/common/CriticalDamageEvent.java b/src/main/java/com/altnoir/mia/core/event/common/CriticalDamageEvent.java index fc41d18c..765ebace 100644 --- a/src/main/java/com/altnoir/mia/core/event/common/CriticalDamageEvent.java +++ b/src/main/java/com/altnoir/mia/core/event/common/CriticalDamageEvent.java @@ -1,22 +1,19 @@ package com.altnoir.mia.core.event.common; import com.altnoir.mia.init.MiaAttributes; -import net.minecraft.network.chat.Component; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; public class CriticalDamageEvent { public static float onLivingCriticalDamage(LivingEntity entity, DamageSource source, float damage) { - double critChance = entity.getAttribute(MiaAttributes.CRITICAL_HIT).getValue(); - double critDamage = entity.getAttribute(MiaAttributes.CRITICAL_HIT_DAMAGE).getValue(); - if (source.getEntity() instanceof Player player) { - player.sendSystemMessage(Component.literal(critChance * 100 + "% 暴击率, 暴击伤害: " + critDamage)); - } + var chance = player.getAttributeValue(MiaAttributes.CRITICAL_HIT); + var baseDamage = player.getAttributeValue(MiaAttributes.CRITICAL_HIT_DAMAGE); - if (critChance > 0 && entity.getRandom().nextDouble() < critChance) { - return damage * (float) (critDamage + Math.max(0, critChance - 1.0)); + if (chance > 0 && entity.getRandom().nextDouble() < chance) { + return damage * (float) (baseDamage + Math.max(0, chance - 1.0)); + } } return damage; } diff --git a/src/main/java/com/altnoir/mia/init/MiaEvents.java b/src/main/java/com/altnoir/mia/init/MiaEvents.java index 85d4f98f..bb0972e9 100644 --- a/src/main/java/com/altnoir/mia/init/MiaEvents.java +++ b/src/main/java/com/altnoir/mia/init/MiaEvents.java @@ -84,10 +84,4 @@ public static void onLivingDamagePre(LivingDamageEvent.Pre event) { float damage = CriticalDamageEvent.onLivingCriticalDamage(event.getEntity(), event.getSource(), event.getOriginalDamage()); event.setNewDamage(damage); } - - public static void onLivingDamagePost(LivingDamageEvent.Post event) { - if (event.getSource().getEntity() instanceof Player player) { - player.sendSystemMessage(Component.literal(event.getNewDamage() + "点伤害")); - } - } } diff --git a/src/main/java/com/altnoir/mia/mixin/MobMixin.java b/src/main/java/com/altnoir/mia/mixin/MobMixin.java deleted file mode 100644 index 01edd072..00000000 --- a/src/main/java/com/altnoir/mia/mixin/MobMixin.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.altnoir.mia.mixin; - -import com.altnoir.mia.MIA; -import com.altnoir.mia.init.MiaAttributes; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.Mob; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(value = Mob.class) -public class MobMixin { - @Redirect( - method = "doHurtTarget(Lnet/minecraft/world/entity/Entity;)Z", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/entity/Entity;hurt(Lnet/minecraft/world/damagesource/DamageSource;F)Z" - ) - ) - private boolean redirectHurt(Entity entity, DamageSource damageSource, float damage) { - // TODO 暴击和暴伤无法检测 - try { - double critChance = ((Mob) (Object) this).getAttributeValue(MiaAttributes.CRITICAL_HIT); - double critDamage = ((Mob) (Object) this).getAttributeValue(MiaAttributes.CRITICAL_HIT_DAMAGE); - - MIA.LOGGER.info(critChance * 100 + "% 暴击率, 暴击伤害: " + critDamage); - - if (critChance > 0 && ((Mob) (Object) this).getRandom().nextDouble() < critChance) { - float newDamage = damage * (float) (critDamage + Math.max(0, critChance - 1.0)); - return entity.hurt(damageSource, newDamage); - } - } catch (Exception e) { - MIA.LOGGER.error(String.valueOf(e)); - } - - return entity.hurt(damageSource, damage); - } -} diff --git a/src/main/resources/mia.mixins.json b/src/main/resources/mia.mixins.json index 89e94515..bd671a0c 100644 --- a/src/main/resources/mia.mixins.json +++ b/src/main/resources/mia.mixins.json @@ -10,7 +10,6 @@ "ItemEntityMixin", "LivingEntityMixin", "MinecraftMixin", - "MobMixin", "NoiseBasedChunkGeneratorMixin" ], "client": [