From ed42650c2e33acb9cf1143a45b87e6e4ea383e7c Mon Sep 17 00:00:00 2001 From: WayofTime Date: Sun, 27 Mar 2016 16:53:08 -0400 Subject: [PATCH] Playing with secondary effects provided by the offhand. --- .../iface/ISentientSwordEffectProvider.java | 12 ++++ .../bloodmagic/item/sigil/ItemSigilAir.java | 22 ++++++- .../item/soul/ItemSentientSword.java | 62 +++++++++++++------ 3 files changed, 76 insertions(+), 20 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/api/iface/ISentientSwordEffectProvider.java diff --git a/src/main/java/WayofTime/bloodmagic/api/iface/ISentientSwordEffectProvider.java b/src/main/java/WayofTime/bloodmagic/api/iface/ISentientSwordEffectProvider.java new file mode 100644 index 00000000..1c884ed1 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/api/iface/ISentientSwordEffectProvider.java @@ -0,0 +1,12 @@ +package WayofTime.bloodmagic.api.iface; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import WayofTime.bloodmagic.api.soul.EnumDemonWillType; + +public interface ISentientSwordEffectProvider +{ + public boolean applyOnHitEffect(EnumDemonWillType type, ItemStack swordStack, ItemStack providerStack, EntityLivingBase attacker, EntityLivingBase target); + + public boolean providesEffectForWill(EnumDemonWillType type); +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java index d2bfdd26..a4f41840 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java @@ -1,17 +1,22 @@ package WayofTime.bloodmagic.item.sigil; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumHand; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.iface.ISentientSwordEffectProvider; +import WayofTime.bloodmagic.api.soul.EnumDemonWillType; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; -public class ItemSigilAir extends ItemSigilBase +public class ItemSigilAir extends ItemSigilBase implements ISentientSwordEffectProvider { public ItemSigilAir() { @@ -48,4 +53,17 @@ public class ItemSigilAir extends ItemSigilBase return super.onItemRightClick(stack, world, player, hand); } + + @Override + public boolean applyOnHitEffect(EnumDemonWillType type, ItemStack swordStack, ItemStack providerStack, EntityLivingBase attacker, EntityLivingBase target) + { + target.addPotionEffect(new PotionEffect(MobEffects.levitation, 200, 0)); + return true; + } + + @Override + public boolean providesEffectForWill(EnumDemonWillType type) + { + return true; + } } diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java index 250d337e..e38bcb2f 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java @@ -1,20 +1,10 @@ package WayofTime.bloodmagic.item.soul; -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.iface.IActivatable; -import WayofTime.bloodmagic.api.soul.EnumDemonWillType; -import WayofTime.bloodmagic.api.soul.IDemonWill; -import WayofTime.bloodmagic.api.soul.IDemonWillWeapon; -import WayofTime.bloodmagic.api.soul.PlayerDemonWillHandler; -import WayofTime.bloodmagic.api.util.helper.NBTHelper; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; -import WayofTime.bloodmagic.registry.ModItems; -import WayofTime.bloodmagic.util.helper.TextHelper; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; +import javax.annotation.Nullable; import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.entity.Entity; @@ -34,11 +24,22 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.iface.IActivatable; +import WayofTime.bloodmagic.api.iface.ISentientSwordEffectProvider; +import WayofTime.bloodmagic.api.soul.EnumDemonWillType; +import WayofTime.bloodmagic.api.soul.IDemonWill; +import WayofTime.bloodmagic.api.soul.IDemonWillWeapon; +import WayofTime.bloodmagic.api.soul.PlayerDemonWillHandler; +import WayofTime.bloodmagic.api.util.helper.NBTHelper; +import WayofTime.bloodmagic.client.IMeshProvider; +import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; +import WayofTime.bloodmagic.registry.ModItems; +import WayofTime.bloodmagic.util.helper.TextHelper; -import javax.annotation.Nullable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IActivatable, IMeshProvider { @@ -57,6 +58,31 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IA setCreativeTab(BloodMagic.tabBloodMagic); } + @Override + public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) + { + if (super.hitEntity(stack, target, attacker)) + { + if (attacker instanceof EntityPlayer) + { + EntityPlayer attackerPlayer = (EntityPlayer) attacker; + ItemStack offStack = attackerPlayer.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND); + if (offStack != null && offStack.getItem() instanceof ISentientSwordEffectProvider) + { + ISentientSwordEffectProvider provider = (ISentientSwordEffectProvider) offStack.getItem(); + if (provider.providesEffectForWill(EnumDemonWillType.DEFAULT)) + { + provider.applyOnHitEffect(EnumDemonWillType.DEFAULT, stack, offStack, attacker, target); + } + } + } + + return true; + } + + return false; + } + public EnumDemonWillType getCurrentType(ItemStack stack) { return EnumDemonWillType.DEFAULT;