Playing with secondary effects provided by the offhand.

This commit is contained in:
WayofTime 2016-03-27 16:53:08 -04:00
parent 000ef44068
commit ed42650c2e
3 changed files with 76 additions and 20 deletions

View file

@ -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);
}

View file

@ -1,17 +1,22 @@
package WayofTime.bloodmagic.item.sigil; 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.entity.player.EntityPlayer;
import net.minecraft.init.MobEffects;
import net.minecraft.init.SoundEvents; import net.minecraft.init.SoundEvents;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import WayofTime.bloodmagic.api.Constants; 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() public ItemSigilAir()
{ {
@ -48,4 +53,17 @@ public class ItemSigilAir extends ItemSigilBase
return super.onItemRightClick(stack, world, player, hand); 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;
}
} }

View file

@ -1,20 +1,10 @@
package WayofTime.bloodmagic.item.soul; package WayofTime.bloodmagic.item.soul;
import WayofTime.bloodmagic.BloodMagic; import java.util.ArrayList;
import WayofTime.bloodmagic.api.Constants; import java.util.Arrays;
import WayofTime.bloodmagic.api.iface.IActivatable; import java.util.List;
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 com.google.common.collect.HashMultimap; import javax.annotation.Nullable;
import com.google.common.collect.Multimap;
import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
@ -34,11 +24,22 @@ import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; 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 com.google.common.collect.HashMultimap;
import java.util.ArrayList; import com.google.common.collect.Multimap;
import java.util.Arrays;
import java.util.List;
public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IActivatable, IMeshProvider public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IActivatable, IMeshProvider
{ {
@ -57,6 +58,31 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IA
setCreativeTab(BloodMagic.tabBloodMagic); 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) public EnumDemonWillType getCurrentType(ItemStack stack)
{ {
return EnumDemonWillType.DEFAULT; return EnumDemonWillType.DEFAULT;