From 0d7d36c0b51be3d9540edbf3737c53b8355209c4 Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Thu, 30 Jul 2020 22:54:37 +0100 Subject: [PATCH] Add mark sacrifice spell --- .../wizardry/item/ItemArtefact.java | 2 +- .../electroblob/wizardry/registry/Spells.java | 2 + .../wizardry/registry/WizardryPotions.java | 4 + .../wizardry/spell/MarkSacrifice.java | 71 ++++++++++++++++++ .../assets/ebwizardry/lang/en_gb.lang | 2 + .../assets/ebwizardry/lang/en_us.lang | 2 + .../ebwizardry/spells/mark_sacrifice.json | 24 ++++++ .../gui/potion_icons/mark_of_sacrifice.png | Bin 0 -> 11834 bytes .../textures/spells/mark_sacrifice.png | Bin 0 -> 5864 bytes 9 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 src/main/java/electroblob/wizardry/spell/MarkSacrifice.java create mode 100644 src/main/resources/assets/ebwizardry/spells/mark_sacrifice.json create mode 100644 src/main/resources/assets/ebwizardry/textures/gui/potion_icons/mark_of_sacrifice.png create mode 100644 src/main/resources/assets/ebwizardry/textures/spells/mark_sacrifice.png diff --git a/src/main/java/electroblob/wizardry/item/ItemArtefact.java b/src/main/java/electroblob/wizardry/item/ItemArtefact.java index 45749116..afc47d74 100644 --- a/src/main/java/electroblob/wizardry/item/ItemArtefact.java +++ b/src/main/java/electroblob/wizardry/item/ItemArtefact.java @@ -493,7 +493,7 @@ public class ItemArtefact extends Item { } @SubscribeEvent - public static void onSpellCastPostEvent(SpellCastEvent.Pre event){ + public static void onSpellCastPostEvent(SpellCastEvent.Post event){ if(event.getCaster() instanceof EntityPlayer){ diff --git a/src/main/java/electroblob/wizardry/registry/Spells.java b/src/main/java/electroblob/wizardry/registry/Spells.java index fd4ee87a..e6327ce9 100644 --- a/src/main/java/electroblob/wizardry/registry/Spells.java +++ b/src/main/java/electroblob/wizardry/registry/Spells.java @@ -241,6 +241,7 @@ public final class Spells { // Wizardry 4.3 spells public static final Spell blinding_flash = placeholder(); + public static final Spell mark_sacrifice = placeholder(); public static final Spell stormcloud = placeholder(); public static final Spell fangs = placeholder(); @@ -452,6 +453,7 @@ public final class Spells { // Wizardry 4.3 spells registry.register(new BlindingFlash()); + registry.register(new MarkSacrifice()); registry.register(new Stormcloud()); registry.register(new Fangs()); diff --git a/src/main/java/electroblob/wizardry/registry/WizardryPotions.java b/src/main/java/electroblob/wizardry/registry/WizardryPotions.java index 8501009f..9f5f7338 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryPotions.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryPotions.java @@ -55,6 +55,7 @@ public final class WizardryPotions { public static final Potion curse_of_undeath = placeholder(); public static final Potion containment = placeholder(); public static final Potion frost_step = placeholder(); + public static final Potion mark_of_sacrifice = placeholder(); /** * Sets both the registry and unlocalised names of the given potion, then registers it with the given registry. Use @@ -190,6 +191,9 @@ public final class WizardryPotions { registerPotion(registry, "frost_step", new PotionFrostStep(false, 0).setBeneficial()); + registerPotion(registry, "mark_of_sacrifice", new PotionMagicEffect(true, 0xe90e48, + new ResourceLocation(Wizardry.MODID, "textures/gui/potion_icons/mark_of_sacrifice.png"))); + } } \ No newline at end of file diff --git a/src/main/java/electroblob/wizardry/spell/MarkSacrifice.java b/src/main/java/electroblob/wizardry/spell/MarkSacrifice.java new file mode 100644 index 00000000..60217c5a --- /dev/null +++ b/src/main/java/electroblob/wizardry/spell/MarkSacrifice.java @@ -0,0 +1,71 @@ +package electroblob.wizardry.spell; + +import electroblob.wizardry.item.SpellActions; +import electroblob.wizardry.registry.WizardryItems; +import electroblob.wizardry.registry.WizardryPotions; +import electroblob.wizardry.util.EntityUtils; +import electroblob.wizardry.util.ParticleBuilder; +import electroblob.wizardry.util.ParticleBuilder.Type; +import electroblob.wizardry.util.SpellModifiers; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.event.entity.living.LivingHurtEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +@EventBusSubscriber +public class MarkSacrifice extends SpellRay { + + private static final float DAMAGE_INCREASE_PER_LEVEL = 0.6f; + + public MarkSacrifice(){ + super("mark_sacrifice", SpellActions.POINT, false); + this.soundValues(1, 1.1f, 0.2f); + addProperties(EFFECT_DURATION, EFFECT_STRENGTH); + } + + @Override + protected boolean onEntityHit(World world, Entity target, Vec3d hit, EntityLivingBase caster, Vec3d origin, int ticksInUse, SpellModifiers modifiers){ + + if(EntityUtils.isLiving(target)){ + ((EntityLivingBase)target).addPotionEffect(new PotionEffect(WizardryPotions.mark_of_sacrifice, + (int)(getProperty(EFFECT_DURATION).floatValue() * modifiers.get(WizardryItems.duration_upgrade)), + getProperty(EFFECT_STRENGTH).intValue() + SpellBuff.getStandardBonusAmplifier(modifiers.get(SpellModifiers.POTENCY)))); + } + + return true; + } + + @Override + protected boolean onBlockHit(World world, BlockPos pos, EnumFacing side, Vec3d hit, EntityLivingBase caster, Vec3d origin, int ticksInUse, SpellModifiers modifiers){ + return false; + } + + @Override + protected boolean onMiss(World world, EntityLivingBase caster, Vec3d origin, Vec3d direction, int ticksInUse, SpellModifiers modifiers){ + return true; + } + + @Override + protected void spawnParticle(World world, double x, double y, double z, double vx, double vy, double vz){ + ParticleBuilder.create(Type.DARK_MAGIC).pos(x, y, z).clr(0xe90e48).spawn(world); + ParticleBuilder.create(Type.SPARKLE).pos(x, y, z).time(12 + world.rand.nextInt(8)).clr(0xff7bbb).spawn(world); + } + + @SubscribeEvent + public static void onLivingHurtEvent(LivingHurtEvent event){ + + PotionEffect effect = event.getEntityLiving().getActivePotionEffect(WizardryPotions.mark_of_sacrifice); + + if(effect != null && event.getSource().isMagicDamage()){ + event.setAmount(event.getAmount() * (1 + effect.getAmplifier() * DAMAGE_INCREASE_PER_LEVEL)); + event.getEntityLiving().removePotionEffect(WizardryPotions.mark_of_sacrifice); + } + } + +} diff --git a/src/main/resources/assets/ebwizardry/lang/en_gb.lang b/src/main/resources/assets/ebwizardry/lang/en_gb.lang index ad3878c6..dfa2b95f 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_gb.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_gb.lang @@ -852,6 +852,7 @@ spell.ebwizardry\:lightning_ray=Lightning Ray spell.ebwizardry\:lightning_sigil=Lightning Sigil spell.ebwizardry\:lightning_web=Lightning Web spell.ebwizardry\:magic_missile=Magic Missile +spell.ebwizardry\:mark_sacrifice=Mark Sacrifice spell.ebwizardry\:metamorphosis=Metamorphosis spell.ebwizardry\:meteor=Meteor spell.ebwizardry\:mind_control=Mind Control @@ -1033,6 +1034,7 @@ spell.ebwizardry\:lightning_ray.desc=Creates a stream of lightning in the direct spell.ebwizardry\:lightning_sigil.desc=Places a magical lightning trap on the ground which damages the creature that triggers it and chains lightning to other nearby creatures. spell.ebwizardry\:lightning_web.desc="Focus. Channel the storm in your mind through your wand and unleash its fury." spell.ebwizardry\:magic_missile.desc=Fires a bolt of magical energy in the direction you are pointing. +spell.ebwizardry\:mark_sacrifice.desc=Marks the target as a divine sacrifice. The next magical attack on a marked creature deals 60%% extra damage for each level of the effect. spell.ebwizardry\:metamorphosis.desc=Changes the target into another form. Only works on some creatures. spell.ebwizardry\:meteor.desc=Some wizards just want to see the world burn... spell.ebwizardry\:mind_control.desc=Takes control of the target's mind for 30 seconds, causing it switch sides and fight for the caster instead. Will not work on creatures that are too strong-willed. diff --git a/src/main/resources/assets/ebwizardry/lang/en_us.lang b/src/main/resources/assets/ebwizardry/lang/en_us.lang index 5f294494..27111029 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_us.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_us.lang @@ -852,6 +852,7 @@ spell.ebwizardry\:lightning_ray=Lightning Ray spell.ebwizardry\:lightning_sigil=Lightning Sigil spell.ebwizardry\:lightning_web=Lightning Web spell.ebwizardry\:magic_missile=Magic Missile +spell.ebwizardry\:mark_sacrifice=Mark Sacrifice spell.ebwizardry\:metamorphosis=Metamorphosis spell.ebwizardry\:meteor=Meteor spell.ebwizardry\:mind_control=Mind Control @@ -1033,6 +1034,7 @@ spell.ebwizardry\:lightning_ray.desc=Creates a stream of lightning in the direct spell.ebwizardry\:lightning_sigil.desc=Places a magical lightning trap on the ground which damages the creature that triggers it and chains lightning to other nearby creatures. spell.ebwizardry\:lightning_web.desc="Focus. Channel the storm in your mind through your wand and unleash its fury." spell.ebwizardry\:magic_missile.desc=Fires a bolt of magical energy in the direction you are pointing. +spell.ebwizardry\:mark_sacrifice.desc=Marks the target as a divine sacrifice. The next magical attack on a marked creature deals 60%% extra damage for each level of the effect. spell.ebwizardry\:metamorphosis.desc=Changes the target into another form. Only works on some creatures. spell.ebwizardry\:meteor.desc=Some wizards just want to see the world burn... spell.ebwizardry\:mind_control.desc=Takes control of the target's mind for 30 seconds, causing it switch sides and fight for the caster instead. Will not work on creatures that are too strong-willed. diff --git a/src/main/resources/assets/ebwizardry/spells/mark_sacrifice.json b/src/main/resources/assets/ebwizardry/spells/mark_sacrifice.json new file mode 100644 index 00000000..70ba9bef --- /dev/null +++ b/src/main/resources/assets/ebwizardry/spells/mark_sacrifice.json @@ -0,0 +1,24 @@ +{ + "enabled": { + "book": true, + "scroll": true, + "wands": true, + "npcs": true, + "dispensers": true, + "commands": true, + "treasure": true, + "trades": true, + "looting": true + }, + "tier": "apprentice", + "element": "healing", + "type": "alteration", + "cost": 15, + "chargeup": 0, + "cooldown": 30, + "base_properties": { + "range": 10, + "effect_duration": 300, + "effect_strength": 0 + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/textures/gui/potion_icons/mark_of_sacrifice.png b/src/main/resources/assets/ebwizardry/textures/gui/potion_icons/mark_of_sacrifice.png new file mode 100644 index 0000000000000000000000000000000000000000..1aa8ac87ec89b9dcf4841dbdb75c0db28c75f42b GIT binary patch literal 11834 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 XBKNSq_sNH1P-5|P^>bP0l+XkK&rgJ! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/spells/mark_sacrifice.png b/src/main/resources/assets/ebwizardry/textures/spells/mark_sacrifice.png new file mode 100644 index 0000000000000000000000000000000000000000..c52f7d246da68edc7d1a9785be9f341e306bf731 GIT binary patch literal 5864 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 Y`rkHqhm{R?I;aWd>FVdQ&MBb@0JF{kO#lD@ literal 0 HcmV?d00001