From 14cbb9e082b442df2745ef50a949ea1712fd2994 Mon Sep 17 00:00:00 2001 From: CammiePone Date: Tue, 2 Jan 2024 07:07:49 -0800 Subject: [PATCH] made damage from magical projectiles consistent with vanilla --- .../common/registry/ArcanusDamageTypes.java | 12 +++++++++++- .../spell_components/effects/DamageSpellEffect.java | 6 ++++-- .../data/arcanuscontinuum/damage_type/magic.json | 2 +- .../damage_type/magic_projectile.json | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/common/registry/ArcanusDamageTypes.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/common/registry/ArcanusDamageTypes.java index 6a60d551..cf05858c 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/common/registry/ArcanusDamageTypes.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/common/registry/ArcanusDamageTypes.java @@ -4,6 +4,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.damage.DamageType; +import net.minecraft.entity.projectile.ProjectileEntity; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKeys; import net.minecraft.world.World; @@ -11,12 +12,21 @@ public class ArcanusDamageTypes { public static final RegistryKey MAGIC = RegistryKey.of(RegistryKeys.DAMAGE_TYPE, Arcanus.id("magic")); + public static final RegistryKey MAGIC_PROJECTILE = RegistryKey.of(RegistryKeys.DAMAGE_TYPE, Arcanus.id("magic_projectile")); public static DamageSource getMagicDamage(Entity source) { return create(source.getWorld(), MAGIC, source); } - public static DamageSource create(World world, RegistryKey key, @Nullable Entity attacker) { + public static DamageSource getMagicDamage(ProjectileEntity source, @Nullable Entity attacker) { + return create(source.getWorld(), MAGIC_PROJECTILE, source, attacker); + } + + public static DamageSource create(World world, RegistryKey key, Entity attacker) { return new DamageSource(world.getRegistryManager().get(RegistryKeys.DAMAGE_TYPE).getHolderOrThrow(key), attacker); } + + public static DamageSource create(World world, RegistryKey key, ProjectileEntity source, @Nullable Entity attacker) { + return new DamageSource(world.getRegistryManager().get(RegistryKeys.DAMAGE_TYPE).getHolderOrThrow(key), source, attacker); + } } diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/common/spell_components/effects/DamageSpellEffect.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/common/spell_components/effects/DamageSpellEffect.java index 3fe179c4..2c7cc627 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/common/spell_components/effects/DamageSpellEffect.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/common/spell_components/effects/DamageSpellEffect.java @@ -8,7 +8,9 @@ import dev.cammiescorner.arcanuscontinuum.common.registry.ArcanusSpellComponents; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.projectile.ProjectileEntity; import net.minecraft.item.ItemStack; +import net.minecraft.registry.tag.DamageTypeTags; import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.world.World; @@ -28,12 +30,12 @@ public void effect(@Nullable LivingEntity caster, @Nullable Entity sourceEntity, Entity entity = entityHit.getEntity(); float damage = 1.5F; - if(entity instanceof Targetable targetable && targetable.arcanuscontinuum$canBeTargeted()) { + if(caster != null && entity instanceof Targetable targetable && targetable.arcanuscontinuum$canBeTargeted()) { if(entity.isWet() && effects.contains(ArcanusSpellComponents.ELECTRIC.get())) damage *= 2F; entity.timeUntilRegen = 0; - entity.damage(ArcanusDamageTypes.getMagicDamage(caster), (float) (damage * effects.stream().filter(ArcanusSpellComponents.DAMAGE::is).count() * potency)); + entity.damage(sourceEntity instanceof ProjectileEntity projectile ? ArcanusDamageTypes.getMagicDamage(projectile, caster) : ArcanusDamageTypes.getMagicDamage(caster), (float) (damage * effects.stream().filter(ArcanusSpellComponents.DAMAGE::is).count() * potency)); } } } diff --git a/src/main/resources/data/arcanuscontinuum/damage_type/magic.json b/src/main/resources/data/arcanuscontinuum/damage_type/magic.json index 0ec19423..08a7c0c4 100644 --- a/src/main/resources/data/arcanuscontinuum/damage_type/magic.json +++ b/src/main/resources/data/arcanuscontinuum/damage_type/magic.json @@ -1,5 +1,5 @@ { - "exhaustion": 0.0, + "exhaustion": 0.2, "message_id": "arcanuscontinuum.magic", "scaling": "when_caused_by_living_non_player" } diff --git a/src/main/resources/data/arcanuscontinuum/damage_type/magic_projectile.json b/src/main/resources/data/arcanuscontinuum/damage_type/magic_projectile.json index 0ec19423..08a7c0c4 100644 --- a/src/main/resources/data/arcanuscontinuum/damage_type/magic_projectile.json +++ b/src/main/resources/data/arcanuscontinuum/damage_type/magic_projectile.json @@ -1,5 +1,5 @@ { - "exhaustion": 0.0, + "exhaustion": 0.2, "message_id": "arcanuscontinuum.magic", "scaling": "when_caused_by_living_non_player" }