diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java index feac87b0..b09f3e3a 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java @@ -3,10 +3,12 @@ package WayofTime.bloodmagic.item; import java.util.List; import java.util.Set; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.block.Block; import net.minecraft.block.BlockLeavesBase; import net.minecraft.block.material.Material; import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; @@ -31,14 +33,20 @@ public class ItemBoundAxe extends ItemBoundTool public ItemBoundAxe() { - super("axe", 7, 5, EFFECTIVE_ON); + super("axe", 7, EFFECTIVE_ON); setRegistryName(Constants.BloodMagicItem.BOUND_AXE.getRegName()); } @Override - public float getStrVsBlock(ItemStack stack, Block block) + public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { - return block.getMaterial() != Material.wood && block.getMaterial() != Material.plants && block.getMaterial() != Material.vine ? super.getStrVsBlock(stack, block) : 12F; + return true; + } + + @Override + public boolean onBlockDestroyed(ItemStack stack, World world, Block block, BlockPos pos, EntityLivingBase player) + { + return true; } @Override @@ -95,8 +103,7 @@ public class ItemBoundAxe extends ItemBoundTool } } - ItemBindable.syphonNetwork(stack, player, (int) (charge * charge * charge / 2.7)); - + NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, (int) (charge * charge * charge / 2.7)); world.createExplosion(player, playerPos.getX(), playerPos.getY(), playerPos.getZ(), 0.1F, false); dropStacks(drops, world, playerPos.add(0, 1, 0)); } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java index 9eebb17c..930bc8ad 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java @@ -3,9 +3,11 @@ package WayofTime.bloodmagic.item; import java.util.List; import java.util.Set; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; @@ -30,20 +32,35 @@ public class ItemBoundPickaxe extends ItemBoundTool public ItemBoundPickaxe() { - super("pickaxe", 5, 5, EFFECTIVE_ON); + super("pickaxe", 5, EFFECTIVE_ON); setRegistryName(Constants.BloodMagicItem.BOUND_PICKAXE.getRegName()); } @Override - public boolean canHarvestBlock(Block blockIn) + public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { return true; } + @Override + public boolean onBlockDestroyed(ItemStack stack, World world, Block block, BlockPos pos, EntityLivingBase player) + { + return true; + } + + @Override + public boolean canHarvestBlock(Block blockIn) + { + return blockIn == Blocks.obsidian ? this.toolMaterial.getHarvestLevel() == 3 : (blockIn != Blocks.diamond_block && blockIn != Blocks.diamond_ore ? (blockIn != Blocks.emerald_ore && blockIn != Blocks.emerald_block ? (blockIn != Blocks.gold_block && blockIn != Blocks.gold_ore ? (blockIn != Blocks.iron_block && blockIn != Blocks.iron_ore ? (blockIn != Blocks.lapis_block && blockIn != Blocks.lapis_ore ? (blockIn != Blocks.redstone_ore && blockIn != Blocks.lit_redstone_ore ? (blockIn.getMaterial() == Material.rock || (blockIn.getMaterial() == Material.iron || blockIn.getMaterial() == Material.anvil)) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2); + } + @Override public float getStrVsBlock(ItemStack stack, Block block) { - return block.getMaterial() != Material.iron && block.getMaterial() != Material.anvil && block.getMaterial() != Material.rock ? super.getStrVsBlock(stack, block) : 12F; + if (!getActivated(stack)) + return 1.0F; + + return block.getMaterial() != Material.iron && block.getMaterial() != Material.anvil && block.getMaterial() != Material.rock ? super.getStrVsBlock(stack, block) : this.efficiencyOnProperMaterial; } @Override @@ -100,8 +117,7 @@ public class ItemBoundPickaxe extends ItemBoundTool } } - ItemBindable.syphonNetwork(stack, player, (int) (charge * charge * charge / 2.7)); - + NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, (int) (charge * charge * charge / 2.7)); world.createExplosion(player, playerPos.getX(), playerPos.getY(), playerPos.getZ(), 0.5F, false); dropStacks(drops, world, playerPos.add(0, 1, 0)); } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java index 1d48bab2..d5956111 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java @@ -3,8 +3,10 @@ package WayofTime.bloodmagic.item; import java.util.List; import java.util.Set; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.block.Block; import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; @@ -29,14 +31,20 @@ public class ItemBoundShovel extends ItemBoundTool public ItemBoundShovel() { - super("shovel", 1, 5, EFFECTIVE_ON); + super("shovel", 1, EFFECTIVE_ON); setRegistryName(Constants.BloodMagicItem.BOUND_SHOVEL.getRegName()); } @Override - public boolean canHarvestBlock(Block blockIn) + public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { - return blockIn == Blocks.snow_layer || blockIn == Blocks.snow; + return true; + } + + @Override + public boolean onBlockDestroyed(ItemStack stack, World world, Block block, BlockPos pos, EntityLivingBase player) + { + return true; } @Override @@ -93,8 +101,7 @@ public class ItemBoundShovel extends ItemBoundTool } } - ItemBindable.syphonNetwork(stack, player, (int) (charge * charge * charge / 2.7)); - + NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, (int) (charge * charge * charge / 2.7)); world.createExplosion(player, playerPos.getX(), playerPos.getY(), playerPos.getZ(), 0.5F, false); dropStacks(drops, world, playerPos.add(0, 1, 0)); } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java index 617fbb2b..426b8004 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java @@ -5,8 +5,12 @@ import java.util.List; import java.util.Map; import java.util.Set; +import WayofTime.bloodmagic.api.iface.IBindable; +import WayofTime.bloodmagic.registry.ModItems; +import com.google.common.collect.ImmutableSet; import lombok.Getter; import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; @@ -14,6 +18,7 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumAction; import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.StatCollector; @@ -32,39 +37,37 @@ import com.google.common.collect.Multimap; import com.google.common.collect.Multiset; @Getter -public class ItemBoundTool extends ItemBindable implements IActivatable +public class ItemBoundTool extends ItemTool implements IBindable, IActivatable { - private Set effectiveBlocks; protected final String tooltipBase; private final String name; - private final int damage; + private final float damage; public Map heldDownMap = new HashMap(); public Map heldDownCountMap = new HashMap(); public final int chargeTime = 30; - public ItemBoundTool(String name, int damage, int lpUsed, Set effectiveBlocks) + public ItemBoundTool(String name, float damage, Set effectiveBlocks) { - super(); + super(damage, ModItems.boundToolMaterial, effectiveBlocks); setUnlocalizedName(Constants.Mod.MODID + ".bound." + name); - setLPUsed(lpUsed); this.name = name; this.tooltipBase = "tooltip.BloodMagic.bound." + name + "."; - this.effectiveBlocks = effectiveBlocks; this.damage = damage; } - public ItemBoundTool(String name, int damage, int lpUsed) - { - this(name, damage, lpUsed, null); - } - @Override public float getStrVsBlock(ItemStack stack, Block block) { - return this.effectiveBlocks.contains(block) ? 8.0F : 1.0F; + return getActivated(stack) ? getToolMaterial().getEfficiencyOnProperMaterial() : 1.0F; + } + + @Override + public float getDigSpeed(ItemStack stack, IBlockState state) + { + return getActivated(stack) ? getToolMaterial().getEfficiencyOnProperMaterial() : 1.0F; } @Override @@ -90,9 +93,7 @@ public class ItemBoundTool extends ItemBindable implements IActivatable protected int getHeldDownCount(ItemStack stack) { if (!heldDownCountMap.containsKey(stack)) - { return 0; - } return heldDownCountMap.get(stack); } @@ -105,9 +106,7 @@ public class ItemBoundTool extends ItemBindable implements IActivatable protected boolean getBeingHeldDown(ItemStack stack) { if (!heldDownMap.containsKey(stack)) - { return false; - } return heldDownMap.get(stack); } @@ -120,38 +119,22 @@ public class ItemBoundTool extends ItemBindable implements IActivatable @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - // if (!world.isRemote) + if (player.isSneaking()) + setActivatedState(stack, !getActivated(stack)); + + if (!player.isSneaking() && getActivated(stack)) { - if (player.isSneaking()) - setActivatedState(stack, !getActivated(stack)); - // if (getActivated(stack) && ItemBindable.syphonBatteries(stack, - // player, getLPUsed())) - // return stack; -// if (getActivated(stack) && ItemBindable.syphonNetwork(stack, player, getLPUsed())) -// return stack; + BoundToolEvent.Charge event = new BoundToolEvent.Charge(player, stack); + if (MinecraftForge.EVENT_BUS.post(event)) + return event.result; - if (!player.isSneaking() && getActivated(stack)) - { - BoundToolEvent.Charge event = new BoundToolEvent.Charge(player, stack); - if (MinecraftForge.EVENT_BUS.post(event)) - return event.result; - - player.setItemInUse(stack, this.getMaxItemUseDuration(stack)); - setBeingHeldDown(stack, true); - } + player.setItemInUse(stack, this.getMaxItemUseDuration(stack)); + setBeingHeldDown(stack, true); } return stack; } - @Override - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) - { - this.onItemRightClick(stack, world, player); - - return false; - } - @Override public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityPlayer playerIn, int timeLeft) { @@ -218,6 +201,11 @@ public class ItemBoundTool extends ItemBindable implements IActivatable super.addInformation(stack, player, tooltip, advanced); } + @Override + public Set getToolClasses(ItemStack stack) { + return ImmutableSet.of(name); + } + @Override public boolean showDurabilityBar(ItemStack stack) { @@ -249,17 +237,35 @@ public class ItemBoundTool extends ItemBindable implements IActivatable } } - public boolean getActivated(ItemStack stack) - { - NBTHelper.checkNBT(stack); - return stack.getTagCompound().getBoolean(Constants.NBT.ACTIVATED); + // IBindable + + @Override + public String getOwnerName(ItemStack stack) { + return stack != null ? NBTHelper.checkNBT(stack).getTagCompound().getString(Constants.NBT.OWNER_NAME) : null; } + @Override + public String getOwnerUUID(ItemStack stack) { + return stack != null ? NBTHelper.checkNBT(stack).getTagCompound().getString(Constants.NBT.OWNER_UUID) : null; + } + + @Override + public boolean onBind(EntityPlayer player, ItemStack stack) { + return true; + } + + // IActivatable + + @Override + public boolean getActivated(ItemStack stack) + { + return NBTHelper.checkNBT(stack).getTagCompound().getBoolean(Constants.NBT.ACTIVATED); + } + + @Override public ItemStack setActivatedState(ItemStack stack, boolean activated) { - NBTHelper.checkNBT(stack); - stack.getTagCompound().setBoolean(Constants.NBT.ACTIVATED, activated); - + NBTHelper.checkNBT(stack).getTagCompound().setBoolean(Constants.NBT.ACTIVATED, activated); return stack; } }