From aa0f7d81a0b1e267c898d9e48eafeb4e337d02ba Mon Sep 17 00:00:00 2001 From: Arcaratus Date: Tue, 29 Dec 2015 14:32:35 -0500 Subject: [PATCH] Bound tools Fix errors Fix Fix Patch Patch --- .../bloodmagic/api/ItemStackWrapper.java | 10 + .../bloodmagic/api/event/BoundToolEvent.java | 39 ++++ .../item/ItemActivationCrystal.java | 2 +- .../bloodmagic/item/ItemBindable.java | 10 +- .../bloodmagic/item/ItemBloodShard.java | 36 ++++ .../bloodmagic/item/ItemBoundAxe.java | 83 ++++++++ .../bloodmagic/item/ItemBoundPickaxe.java | 89 ++++++++ .../bloodmagic/item/ItemBoundShovel.java | 81 ++++++++ .../bloodmagic/item/ItemBoundSword.java | 137 ++++++++++++ .../bloodmagic/item/ItemBoundTool.java | 196 ++++++++++++++++++ .../bloodmagic/item/ItemInscriptionTool.java | 2 +- .../bloodmagic/item/sigil/ItemSigilAir.java | 2 +- .../bloodmagic/item/sigil/ItemSigilBase.java | 4 +- .../item/sigil/ItemSigilBloodLight.java | 5 +- .../bloodmagic/item/sigil/ItemSigilLava.java | 8 +- .../item/sigil/ItemSigilToggleable.java | 6 +- .../bloodmagic/item/sigil/ItemSigilVoid.java | 8 +- .../bloodmagic/item/sigil/ItemSigilWater.java | 8 +- .../potion/PotionEventHandlers.java | 24 ++- .../bloodmagic/registry/ModItems.java | 29 +++ .../bloodmagic/util/handler/EventHandler.java | 11 + .../assets/bloodmagic/lang/en_US.lang | 13 ++ .../models/item/ItemBloodShard0.json | 6 + .../models/item/ItemBloodShard1.json | 6 + .../bloodmagic/models/item/ItemBoundAxe0.json | 6 + .../bloodmagic/models/item/ItemBoundAxe1.json | 18 ++ .../models/item/ItemBoundPickaxe0.json | 6 + .../models/item/ItemBoundPickaxe1.json | 18 ++ .../models/item/ItemBoundShovel0.json | 6 + .../models/item/ItemBoundShovel1.json | 18 ++ .../models/item/ItemBoundSword0.json | 6 + .../models/item/ItemBoundSword1.json | 18 ++ ...e_deactivated.png => Item_deactivated.png} | Bin 33 files changed, 880 insertions(+), 31 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/api/event/BoundToolEvent.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBloodShard.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBloodShard0.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBloodShard1.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe0.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe1.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe0.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe1.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel0.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel1.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundSword0.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundSword1.json rename src/main/resources/assets/bloodmagic/textures/items/{BoundPickaxe_deactivated.png => Item_deactivated.png} (100%) diff --git a/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java b/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java index 4bc3bf7e..a6a79bb6 100644 --- a/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java +++ b/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java @@ -2,9 +2,11 @@ package WayofTime.bloodmagic.api; import lombok.EqualsAndHashCode; import lombok.RequiredArgsConstructor; +import lombok.Setter; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; @RequiredArgsConstructor @EqualsAndHashCode @@ -13,6 +15,8 @@ public class ItemStackWrapper { public final Item item; public final int stackSize; public final int meta; + @Setter + public NBTTagCompound nbtTag; public ItemStackWrapper(Item item, int stackSize) { this(item, stackSize, 0); @@ -50,4 +54,10 @@ public class ItemStackWrapper { public String toString() { return stackSize + "x" + item.getUnlocalizedName() + "@" + this.meta; } + + public ItemStack toStack(int count) { + ItemStack result = new ItemStack(item, count, meta); + result.setTagCompound(nbtTag); + return result; + } } diff --git a/src/main/java/WayofTime/bloodmagic/api/event/BoundToolEvent.java b/src/main/java/WayofTime/bloodmagic/api/event/BoundToolEvent.java new file mode 100644 index 00000000..55edea89 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/api/event/BoundToolEvent.java @@ -0,0 +1,39 @@ +package WayofTime.bloodmagic.api.event; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.eventhandler.Cancelable; +import net.minecraftforge.fml.common.eventhandler.Event; + +public class BoundToolEvent extends Event { + + public EntityPlayer player; + + public BoundToolEvent(EntityPlayer player) { + this.player = player; + } + + @Cancelable + public static class Charge extends BoundToolEvent { + + public ItemStack result; + + public Charge(EntityPlayer player, ItemStack result) { + super(player); + this.result = result; + } + } + + @Cancelable + public static class Release extends BoundToolEvent { + + public final ItemStack boundTool; + public int charge; + + public Release(EntityPlayer player, ItemStack boundTool, int charge) { + super(player); + this.boundTool = boundTool; + this.charge = charge; + } + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java b/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java index d765a02b..f38fd9de 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java @@ -20,7 +20,7 @@ public class ItemActivationCrystal extends ItemBindable { setUnlocalizedName(Constants.Mod.MODID + ".activationCrystal."); setHasSubtypes(true); - setEnergyUsed(100); + setLPUsed(100); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBindable.java b/src/main/java/WayofTime/bloodmagic/item/ItemBindable.java index b02fac1b..2c9707da 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBindable.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBindable.java @@ -25,7 +25,7 @@ import java.util.List; public class ItemBindable extends Item implements IBindable { - private int energyUsed; + private int lpUsed; public ItemBindable() { super(); @@ -119,12 +119,12 @@ public class ItemBindable extends Item implements IBindable { } } - public int getEnergyUsed() { - return this.energyUsed; + public int getLPUsed() { + return this.lpUsed; } - protected void setEnergyUsed(int energyUsed) { - this.energyUsed = energyUsed; + protected void setLPUsed(int lpUsed) { + this.lpUsed = lpUsed; } public String getBindableOwner(ItemStack stack) { diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBloodShard.java b/src/main/java/WayofTime/bloodmagic/item/ItemBloodShard.java new file mode 100644 index 00000000..8d74443c --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBloodShard.java @@ -0,0 +1,36 @@ +package WayofTime.bloodmagic.item; + +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.Constants; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.List; + +public class ItemBloodShard extends Item { + + public String[] names = { "weak", "demon" }; + + public ItemBloodShard() { + super(); + + setCreativeTab(BloodMagic.tabBloodMagic); + setUnlocalizedName(Constants.Mod.MODID + ".bloodShard."); + setHasSubtypes(true); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item id, CreativeTabs creativeTab, List list) { + for (int i = 0; i < names.length; i++) + list.add(new ItemStack(id, 1, i)); + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return super.getUnlocalizedName(stack) + names[stack.getItemDamage()]; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java new file mode 100644 index 00000000..52862ce7 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java @@ -0,0 +1,83 @@ +package WayofTime.bloodmagic.item; + +import WayofTime.bloodmagic.api.ItemStackWrapper; +import com.google.common.collect.HashMultiset; +import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; +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.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockPos; +import net.minecraft.world.World; + +import java.util.List; +import java.util.Set; + +public class ItemBoundAxe extends ItemBoundTool { + + private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.planks, Blocks.bookshelf, Blocks.log, Blocks.log2, Blocks.chest, Blocks.pumpkin, Blocks.lit_pumpkin, Blocks.melon_block, Blocks.ladder); + + public ItemBoundAxe() { + super("axe", 5, EFFECTIVE_ON); + } + + @Override + public float getStrVsBlock(ItemStack stack, Block block) { + return block.getMaterial() != Material.wood && block.getMaterial() != Material.plants && block.getMaterial() != Material.vine ? super.getStrVsBlock(stack, block) : 12F; + } + + @Override + protected void onBoundRelease(ItemStack stack, World world, EntityPlayer player, int charge) { + boolean silkTouch = EnchantmentHelper.getSilkTouchModifier(player); + int fortuneLvl = EnchantmentHelper.getFortuneModifier(player); + int range = (int) (charge * 0.25); + + HashMultiset drops = HashMultiset.create(); + + BlockPos playerPos = player.getPosition().add(0, -1, 0); + + for (int i = -range; i <= range; i++) { + for (int j = -range; j <= range; j++) { + for (int k = -range; k <= range; k++) { + BlockPos blockPos = playerPos.add(i, j, k); + Block block = world.getBlockState(blockPos).getBlock(); + int blockMeta = block.getMetaFromState(world.getBlockState(blockPos)); + + if (block != null && block.getBlockHardness(world, blockPos) != -1) { + float strengthVsBlock = getStrVsBlock(stack, block); + + if (strengthVsBlock > 1.1F || block instanceof BlockLeavesBase && world.canMineBlockBody(player, blockPos)) { + if (silkTouch && block.canSilkHarvest(world, blockPos, world.getBlockState(blockPos), player)) + drops.add(new ItemStackWrapper(block, 1, blockMeta)); + else { + List itemDrops = block.getDrops(world, blockPos, world.getBlockState(blockPos), fortuneLvl); + + if (itemDrops != null) + for (ItemStack stacks : itemDrops) + drops.add(ItemStackWrapper.getHolder(stacks)); + } + + world.setBlockToAir(blockPos); + } + } + } + } + } + + world.createExplosion(player, playerPos.getX(), playerPos.getY(), playerPos.getZ(), 0.5F, false); + dropStacks(drops, world, playerPos.add(0, 1, 0)); + } + + @Override + public Multimap getAttributeModifiers(ItemStack stack) { + Multimap multimap = super.getAttributeModifiers(stack); + multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Weapon modifier", 7, 0)); + return multimap; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java new file mode 100644 index 00000000..17a7e3c0 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java @@ -0,0 +1,89 @@ +package WayofTime.bloodmagic.item; + +import WayofTime.bloodmagic.api.ItemStackWrapper; +import com.google.common.collect.HashMultiset; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multiset; +import com.google.common.collect.Sets; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockPos; +import net.minecraft.world.World; + +import java.util.List; +import java.util.Set; + +public class ItemBoundPickaxe extends ItemBoundTool { + + private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.activator_rail, Blocks.coal_ore, Blocks.cobblestone, Blocks.detector_rail, Blocks.diamond_block, Blocks.diamond_ore, Blocks.double_stone_slab, Blocks.golden_rail, Blocks.gold_block, Blocks.gold_ore, Blocks.ice, Blocks.iron_block, Blocks.iron_ore, Blocks.lapis_block, Blocks.lapis_ore, Blocks.lit_redstone_ore, Blocks.mossy_cobblestone, Blocks.netherrack, Blocks.packed_ice, Blocks.rail, Blocks.redstone_ore, Blocks.sandstone, Blocks.red_sandstone, Blocks.stone, Blocks.stone_slab); + + public ItemBoundPickaxe() { + super("pickaxe", 5, EFFECTIVE_ON); + } + + @Override + public boolean canHarvestBlock(Block blockIn) { + return true; + } + + @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; + } + + @Override + protected void onBoundRelease(ItemStack stack, World world, EntityPlayer player, int charge) { + boolean silkTouch = EnchantmentHelper.getSilkTouchModifier(player); + int fortuneLvl = EnchantmentHelper.getFortuneModifier(player); + int range = (int) (charge * 0.25); + + HashMultiset drops = HashMultiset.create(); + + BlockPos playerPos = player.getPosition().add(0, -1, 0); + + for (int i = -range; i <= range; i++) { + for (int j = -range; j <= range; j++) { + for (int k = -range; k <= range; k++) { + BlockPos blockPos = playerPos.add(i, j, k); + Block block = world.getBlockState(blockPos).getBlock(); + int blockMeta = block.getMetaFromState(world.getBlockState(blockPos)); + + if (block != null && block.getBlockHardness(world, blockPos) != -1) { + float strengthVsBlock = getStrVsBlock(stack, block); + + if (strengthVsBlock > 1.1F && world.canMineBlockBody(player, blockPos)) { + if (silkTouch && block.canSilkHarvest(world, blockPos, world.getBlockState(blockPos), player)) + drops.add(new ItemStackWrapper(block, 1, blockMeta)); + else { + List itemDrops = block.getDrops(world, blockPos, world.getBlockState(blockPos), fortuneLvl); + + if (itemDrops != null) + for (ItemStack stacks : itemDrops) + drops.add(ItemStackWrapper.getHolder(stacks)); + } + + world.setBlockToAir(blockPos); + } + } + } + } + } + + world.createExplosion(player, playerPos.getX(), playerPos.getY(), playerPos.getZ(), 0.5F, false); + dropStacks(drops, world, playerPos.add(0, 1, 0)); + } + + @Override + public Multimap getAttributeModifiers(ItemStack stack) { + Multimap multimap = super.getAttributeModifiers(stack); + multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Weapon modifier", 5, 0)); + return multimap; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java new file mode 100644 index 00000000..f1eaba9a --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java @@ -0,0 +1,81 @@ +package WayofTime.bloodmagic.item; + +import WayofTime.bloodmagic.api.ItemStackWrapper; +import com.google.common.collect.HashMultiset; +import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; +import net.minecraft.block.Block; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockPos; +import net.minecraft.world.World; + +import java.util.List; +import java.util.Set; + +public class ItemBoundShovel extends ItemBoundTool { + + private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.clay, Blocks.dirt, Blocks.farmland, Blocks.grass, Blocks.gravel, Blocks.mycelium, Blocks.sand, Blocks.snow, Blocks.snow_layer, Blocks.soul_sand); + + public ItemBoundShovel() { + super("shovel", 5, EFFECTIVE_ON); + } + + @Override + public boolean canHarvestBlock(Block blockIn) { + return blockIn == Blocks.snow_layer || blockIn == Blocks.snow; + } + + @Override + protected void onBoundRelease(ItemStack stack, World world, EntityPlayer player, int charge) { + boolean silkTouch = EnchantmentHelper.getSilkTouchModifier(player); + int fortuneLvl = EnchantmentHelper.getFortuneModifier(player); + int range = (int) (charge * 0.25); + + HashMultiset drops = HashMultiset.create(); + + BlockPos playerPos = player.getPosition().add(0, -1, 0); + + for (int i = -range; i <= range; i++) { + for (int j = -range; j <= range; j++) { + for (int k = -range; k <= range; k++) { + BlockPos blockPos = playerPos.add(i, j, k); + Block block = world.getBlockState(blockPos).getBlock(); + int blockMeta = block.getMetaFromState(world.getBlockState(blockPos)); + + if (block != null && block.getBlockHardness(world, blockPos) != -1) { + float strengthVsBlock = getStrVsBlock(stack, block); + + if (strengthVsBlock > 1.1F && world.canMineBlockBody(player, blockPos)) { + if (silkTouch && block.canSilkHarvest(world, blockPos, world.getBlockState(blockPos), player)) + drops.add(new ItemStackWrapper(block, 1, blockMeta)); + else { + List itemDrops = block.getDrops(world, blockPos, world.getBlockState(blockPos), fortuneLvl); + + if (itemDrops != null) + for (ItemStack stacks : itemDrops) + drops.add(ItemStackWrapper.getHolder(stacks)); + } + + world.setBlockToAir(blockPos); + } + } + } + } + } + + world.createExplosion(player, playerPos.getX(), playerPos.getY(), playerPos.getZ(), 0.5F, false); + dropStacks(drops, world, playerPos.add(0, 1, 0)); + } + + @Override + public Multimap getAttributeModifiers(ItemStack stack) { + Multimap multimap = super.getAttributeModifiers(stack); + multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Weapon modifier", 1, 0)); + return multimap; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java new file mode 100644 index 00000000..e2be985b --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java @@ -0,0 +1,137 @@ +package WayofTime.bloodmagic.item; + +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.event.BoundToolEvent; +import WayofTime.bloodmagic.api.util.helper.BindableHelper; +import WayofTime.bloodmagic.api.util.helper.NBTHelper; +import WayofTime.bloodmagic.registry.ModItems; +import WayofTime.bloodmagic.util.helper.TextHelper; +import com.google.common.base.Strings; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.StatCollector; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.List; + +public class ItemBoundSword extends ItemSword { + + private int lpUsed; + + public ItemBoundSword() { + super(ModItems.boundToolMaterial); + + setUnlocalizedName(Constants.Mod.MODID + ".bound.sword"); + setHasSubtypes(true); + setNoRepair(); + setCreativeTab(BloodMagic.tabBloodMagic); + this.lpUsed = 50; + } + + @Override + public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityPlayer playerIn, int timeLeft) { + + if (!playerIn.isSneaking() && getActivated(stack)) { + int i = this.getMaxItemUseDuration(stack) - timeLeft; + BoundToolEvent.Release event = new BoundToolEvent.Release(playerIn, stack, i); + if (MinecraftForge.EVENT_BUS.post(event)) + return; + + i = event.charge; + + //TODO Make conical charge blast + Explosion explosion = new Explosion(worldIn, playerIn, playerIn.posX, playerIn.posY, playerIn.posZ, (float) (i * 0.5), true, true); + if (net.minecraftforge.event.ForgeEventFactory.onExplosionStart(worldIn, explosion)) return; + explosion.doExplosionA(); + explosion.doExplosionB(true); + } + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + + BindableHelper.checkAndSetItemOwner(stack, player); + +// if (!world.isRemote) + { + if (player.isSneaking()) + setActivated(stack, !getActivated(stack)); + if (getActivated(stack) && ItemBindable.syphonBatteries(stack, player, lpUsed)) + return stack; + + 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)); + } + } + + return stack; + } + + @Override + public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { + if (getActivated(stack)) { + if (target != null || attacker != null) { + if (target instanceof EntityLiving) { + if (!target.isPotionActive(Potion.weakness)) + target.addPotionEffect(new PotionEffect(Potion.weakness.id, 60, 2)); + } + } + + return true; + } + + return false; + } + + @Override + public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityPlayer playerIn) + { + return stack; + } + + @Override + public EnumAction getItemUseAction(ItemStack stack) { + return EnumAction.BLOCK; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { + NBTHelper.checkNBT(stack); + + if (StatCollector.canTranslate("tooltip.BloodMagic.bound.sword.desc")) + tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.bound.sword.desc")); + if (getActivated(stack)) + tooltip.add(TextHelper.localize("tooltip.BloodMagic.activated")); + else + tooltip.add(TextHelper.localize("tooltip.BloodMagic.deactivated")); + + if (!Strings.isNullOrEmpty(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID))) + tooltip.add(TextHelper.getFormattedText(String.format(StatCollector.translateToLocal("tooltip.BloodMagic.currentOwner"), stack.getTagCompound().getString(Constants.NBT.OWNER_UUID)))); + } + + private boolean getActivated(ItemStack stack) { + return stack.getItemDamage() > 0; + } + + private ItemStack setActivated(ItemStack stack, boolean activated) { + stack.setItemDamage(activated ? 1 : 0); + + return stack; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java new file mode 100644 index 00000000..9e5e7e8a --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java @@ -0,0 +1,196 @@ +package WayofTime.bloodmagic.item; + +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.ItemStackWrapper; +import WayofTime.bloodmagic.api.event.BoundToolEvent; +import WayofTime.bloodmagic.api.util.helper.BindableHelper; +import WayofTime.bloodmagic.util.helper.TextHelper; +import com.google.common.collect.Multiset; +import lombok.Getter; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +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.util.BlockPos; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.List; +import java.util.Set; + +@Getter +public class ItemBoundTool extends ItemBindable { + + private Set effectiveBlocks; + protected final String tooltipBase; + private final String name; + + public boolean beingHeldDown; + private int heldDownCount; + + public final int chargeTime = 30; + + public ItemBoundTool(String name, int lpUsed, Set effectiveBlocks) { + super(); + setUnlocalizedName(Constants.Mod.MODID + ".bound." + name); + setHasSubtypes(true); + setLPUsed(lpUsed); + setFull3D(); + + this.name = name; + this.tooltipBase = "tooltip.BloodMagic.bound." + name + "."; + this.effectiveBlocks = effectiveBlocks; + } + + public ItemBoundTool(String name, int lpUsed) { + this(name, lpUsed, null); + } + + @Override + public float getStrVsBlock(ItemStack stack, Block block) { + return this.effectiveBlocks.contains(block) ? 8.0F : 1.0F; + } + + @Override + public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) { + if (entityIn instanceof EntityPlayer && getActivated(stack) && isSelected && isBeingHeldDown() && stack == ((EntityPlayer) entityIn).getCurrentEquippedItem()) { + EntityPlayer player = (EntityPlayer) entityIn; + heldDownCount = Math.min(player.getItemInUseDuration(), chargeTime); + } + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + + BindableHelper.checkAndSetItemOwner(stack, player); + +// if (!world.isRemote) + { + if (player.isSneaking()) + setActivated(stack, !getActivated(stack)); +// if (getActivated(stack) && ItemBindable.syphonBatteries(stack, player, getLPUsed())) +// return stack; + + 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)); + beingHeldDown = true; + } + } + + return stack; + } + + @Override + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) { + if (BindableHelper.checkAndSetItemOwner(stack, player) && ItemBindable.syphonBatteries(stack, player, getLPUsed())) + return false; + + return false; + } + + @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) { + if (!playerIn.isSneaking() && getActivated(stack)) { + int i = this.getMaxItemUseDuration(stack) - timeLeft; + BoundToolEvent.Release event = new BoundToolEvent.Release(playerIn, stack, i); + if (MinecraftForge.EVENT_BUS.post(event)) + return; + + i = event.charge; + + onBoundRelease(stack, worldIn, playerIn, Math.min(i, chargeTime)); + beingHeldDown = false; + } + } + + protected void onBoundRelease(ItemStack stack, World world, EntityPlayer player, int charge) { + + } + + @Override + public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityPlayer playerIn) { + return stack; + } + + @Override + public int getMaxItemUseDuration(ItemStack stack) { + return 72000; + } + + @Override + public EnumAction getItemUseAction(ItemStack stack) { + return EnumAction.BOW; + } + + @Override + public int getItemEnchantability() { + return 50; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { + + if (StatCollector.canTranslate(tooltipBase + "desc")) + tooltip.add(TextHelper.localizeEffect(tooltipBase + "desc")); + if (getActivated(stack)) + tooltip.add(TextHelper.localize("tooltip.BloodMagic.activated")); + else + tooltip.add(TextHelper.localize("tooltip.BloodMagic.deactivated")); + + super.addInformation(stack, player, tooltip, advanced); + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return getActivated(stack) && beingHeldDown; + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) { + return ((double) -Math.min(getHeldDownCount(), chargeTime) / chargeTime) + 1; + } + + protected static void dropStacks(Multiset drops, World world, BlockPos posToDrop) { + for (Multiset.Entry entry : drops.entrySet()) { + int count = entry.getCount(); + ItemStackWrapper stack = entry.getElement(); + int maxStackSize = stack.item.getItemStackLimit(stack.toStack(1)); + + while (count >= maxStackSize) { + world.spawnEntityInWorld(new EntityItem(world, posToDrop.getX(), posToDrop.getY(), posToDrop.getZ(), stack.toStack(maxStackSize))); + count -= maxStackSize; + } + + if (count > 0) + world.spawnEntityInWorld(new EntityItem(world, posToDrop.getX(), posToDrop.getY(), posToDrop.getZ(), stack.toStack(count))); + } + } + + public boolean getActivated(ItemStack stack) { + return stack.getItemDamage() > 0; + } + + public ItemStack setActivated(ItemStack stack, boolean activated) { + stack.setItemDamage(activated ? 1 : 0); + + return stack; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java b/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java index 681624e8..ecdba461 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java @@ -24,7 +24,7 @@ public class ItemInscriptionTool extends ItemBindable { public ItemInscriptionTool() { super(); - setEnergyUsed(100); + setLPUsed(100); setUnlocalizedName(Constants.Mod.MODID + ".scribe."); setHasSubtypes(true); } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java index b6f2f985..b536b22b 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java @@ -31,7 +31,7 @@ public class ItemSigilAir extends ItemSigilBase { player.fallDistance = 0; if (!player.capabilities.isCreativeMode) - this.setUnusable(stack, !syphonBatteries(stack, player, getEnergyUsed())); + this.setUnusable(stack, !syphonBatteries(stack, player, getLPUsed())); } return super.onItemRightClick(stack, world, player); diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java index c21f2ede..3d91bee2 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java @@ -24,11 +24,11 @@ public class ItemSigilBase extends ItemBindable implements ISigil { private final String name; private boolean toggleable; - public ItemSigilBase(String name, int energyUsed) { + public ItemSigilBase(String name, int lpUsed) { super(); setUnlocalizedName(Constants.Mod.MODID + ".sigil." + name); - setEnergyUsed(energyUsed); + setLPUsed(lpUsed); this.name = name; this.tooltipBase = "tooltip.BloodMagic.sigil." + name + "."; diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java index 11da2f56..56ae2dac 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java @@ -9,7 +9,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; -import org.lwjgl.Sys; public class ItemSigilBloodLight extends ItemSigilBase { @@ -19,7 +18,7 @@ public class ItemSigilBloodLight extends ItemSigilBase { @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - if (BindableHelper.checkAndSetItemOwner(stack, player) && ItemBindable.syphonBatteries(stack, player, getEnergyUsed() * 5) && !world.isRemote) + if (BindableHelper.checkAndSetItemOwner(stack, player) && ItemBindable.syphonBatteries(stack, player, getLPUsed() * 5) && !world.isRemote) world.spawnEntityInWorld(new EntityBloodLight(world, player)); return stack; @@ -29,7 +28,7 @@ public class ItemSigilBloodLight extends ItemSigilBase { public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) { if (world.isRemote) return false; - if (BindableHelper.checkAndSetItemOwner(stack, player) && ItemBindable.syphonBatteries(stack, player, getEnergyUsed())) { + if (BindableHelper.checkAndSetItemOwner(stack, player) && ItemBindable.syphonBatteries(stack, player, getLPUsed())) { BlockPos newPos = blockPos.offset(side); if (world.isAirBlock(newPos)) { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java index a65d3dab..4069dedc 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java @@ -47,14 +47,14 @@ public class ItemSigilLava extends ItemSigilBase { return stack; } - if (this.canPlaceLava(world, blockpos1) && syphonBatteries(stack, player, getEnergyUsed()) && this.tryPlaceLava(world, blockpos1)) { + if (this.canPlaceLava(world, blockpos1) && syphonBatteries(stack, player, getLPUsed()) && this.tryPlaceLava(world, blockpos1)) { return stack; } } } if (!player.capabilities.isCreativeMode) - this.setUnusable(stack, !syphonBatteries(stack, player, getEnergyUsed())); + this.setUnusable(stack, !syphonBatteries(stack, player, getLPUsed())); } return stack; @@ -74,7 +74,7 @@ public class ItemSigilLava extends ItemSigilBase { FluidStack fluid = new FluidStack(FluidRegistry.LAVA, 1000); int amount = ((IFluidHandler) tile).fill(side, fluid, false); - if (amount > 0 && syphonBatteries(stack, player, getEnergyUsed())) { + if (amount > 0 && syphonBatteries(stack, player, getLPUsed())) { ((IFluidHandler) tile).fill(side, fluid, true); } @@ -90,7 +90,7 @@ public class ItemSigilLava extends ItemSigilBase { return false; } - if (this.canPlaceLava(world, newPos) && syphonBatteries(stack, player, getEnergyUsed())) { + if (this.canPlaceLava(world, newPos) && syphonBatteries(stack, player, getLPUsed())) { return this.tryPlaceLava(world, newPos); } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleable.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleable.java index ba2b629e..d44efb9e 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleable.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleable.java @@ -37,7 +37,7 @@ public class ItemSigilToggleable extends ItemSigilBase { if (!world.isRemote && !isUnusable(stack)) { if (player.isSneaking()) setActivated(stack, !getActivated(stack)); - if (getActivated(stack) && ItemBindable.syphonBatteries(stack, player, getEnergyUsed())) + if (getActivated(stack) && ItemBindable.syphonBatteries(stack, player, getLPUsed())) return stack; } @@ -46,7 +46,7 @@ public class ItemSigilToggleable extends ItemSigilBase { @Override public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) { - if (BindableHelper.checkAndSetItemOwner(stack, player) && ItemBindable.syphonBatteries(stack, player, getEnergyUsed())) + if (BindableHelper.checkAndSetItemOwner(stack, player) && ItemBindable.syphonBatteries(stack, player, getLPUsed())) return onSigilUseFirst(stack, player, world, blockPos, side, hitX, hitY, hitZ); return false; @@ -60,7 +60,7 @@ public class ItemSigilToggleable extends ItemSigilBase { public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) { if (!worldIn.isRemote && entityIn instanceof EntityPlayerMP && getActivated(stack)) { if (worldIn.getWorldTime() % 100 == 0) { - if (!ItemBindable.syphonBatteries(stack, (EntityPlayer) entityIn, getEnergyUsed())) { + if (!ItemBindable.syphonBatteries(stack, (EntityPlayer) entityIn, getLPUsed())) { setActivated(stack, false); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java index 61891921..02565a1e 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java @@ -42,7 +42,7 @@ public class ItemSigilVoid extends ItemSigilBase { return stack; } - if (world.getBlockState(blockpos).getBlock().getMaterial().isLiquid() && syphonBatteries(stack, player, getEnergyUsed())) { + if (world.getBlockState(blockpos).getBlock().getMaterial().isLiquid() && syphonBatteries(stack, player, getLPUsed())) { world.setBlockToAir(blockpos); return stack; } @@ -52,7 +52,7 @@ public class ItemSigilVoid extends ItemSigilBase { } if (!player.capabilities.isCreativeMode) - this.setUnusable(stack, !syphonBatteries(stack, player, getEnergyUsed())); + this.setUnusable(stack, !syphonBatteries(stack, player, getLPUsed())); } return stack; @@ -72,7 +72,7 @@ public class ItemSigilVoid extends ItemSigilBase { if (tile instanceof IFluidHandler) { FluidStack amount = ((IFluidHandler) tile).drain(side, 1000, false); - if (amount != null && amount.amount > 0 && syphonBatteries(stack, player, getEnergyUsed())) { + if (amount != null && amount.amount > 0 && syphonBatteries(stack, player, getLPUsed())) { ((IFluidHandler) tile).drain(side, 1000, true); return true; } @@ -86,7 +86,7 @@ public class ItemSigilVoid extends ItemSigilBase { return false; } - if (world.getBlockState(newPos).getBlock() instanceof IFluidBlock && syphonBatteries(stack, player, getEnergyUsed())) { + if (world.getBlockState(newPos).getBlock() instanceof IFluidBlock && syphonBatteries(stack, player, getLPUsed())) { world.setBlockToAir(newPos); return true; } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java index 2542cdf8..b53086f1 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java @@ -47,14 +47,14 @@ public class ItemSigilWater extends ItemSigilBase { return stack; } - if (this.canPlaceWater(world, blockpos1) && syphonBatteries(stack, player, getEnergyUsed()) && this.tryPlaceWater(world, blockpos1)) { + if (this.canPlaceWater(world, blockpos1) && syphonBatteries(stack, player, getLPUsed()) && this.tryPlaceWater(world, blockpos1)) { return stack; } } } if (!player.capabilities.isCreativeMode) - this.setUnusable(stack, !syphonBatteries(stack, player, getEnergyUsed())); + this.setUnusable(stack, !syphonBatteries(stack, player, getLPUsed())); } return stack; @@ -75,7 +75,7 @@ public class ItemSigilWater extends ItemSigilBase { FluidStack fluid = new FluidStack(FluidRegistry.WATER, 1000); int amount = ((IFluidHandler) tile).fill(side, fluid, false); - if (amount > 0 && syphonBatteries(stack, player, getEnergyUsed())) { + if (amount > 0 && syphonBatteries(stack, player, getLPUsed())) { ((IFluidHandler) tile).fill(side, fluid, true); } @@ -91,7 +91,7 @@ public class ItemSigilWater extends ItemSigilBase { return false; } - if (this.canPlaceWater(world, newPos) && syphonBatteries(stack, player, getEnergyUsed())) { + if (this.canPlaceWater(world, newPos) && syphonBatteries(stack, player, getLPUsed())) { return this.tryPlaceWater(world, newPos); } diff --git a/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java b/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java index 3d759db6..67d72f00 100644 --- a/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java +++ b/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java @@ -1,16 +1,18 @@ package WayofTime.bloodmagic.potion; +import WayofTime.bloodmagic.registry.ModItems; import WayofTime.bloodmagic.registry.ModPotions; import net.minecraft.entity.Entity; import net.minecraft.entity.IProjectile; +import net.minecraft.entity.passive.EntityAnimal; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.entity.projectile.EntityThrowable; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.living.EnderTeleportEvent; -import net.minecraftforge.event.entity.living.LivingAttackEvent; -import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.event.entity.living.*; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -101,6 +103,22 @@ public class PotionEventHandlers { } } + @SubscribeEvent + public void onEntityDrop(LivingDropsEvent event) { + if (event.source.getDamageType().equals("player")) { + double rand = Math.random(); + + if (!(event.entityLiving instanceof EntityAnimal)) { + PotionEffect effect = event.entityLiving.getActivePotionEffect(Potion.weakness); + + if (effect != null) + if (effect.getAmplifier() >= 2) + if (rand < 0.2) + event.entityLiving.dropItem(ModItems.bloodShard, 1); + } + } + } + @SubscribeEvent(priority = EventPriority.HIGHEST) public void onPlayerDamageEvent(LivingAttackEvent event) { if (event.entityLiving.isPotionActive(ModPotions.whirlwind) && event.isCancelable() && event.source.isProjectile()) diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java index a8d6e45b..d885673f 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java @@ -1,6 +1,7 @@ package WayofTime.bloodmagic.registry; import net.minecraft.item.Item; +import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.fml.common.registry.GameRegistry; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.ConfigHandler; @@ -35,6 +36,11 @@ public class ModItems { public static Item packSacrifice; public static Item daggerOfSacrifice; + public static Item boundSword; + public static Item boundPickaxe; + public static Item boundAxe; + public static Item boundShovel; + public static Item sigilDivination; public static Item sigilAir; public static Item sigilWater; @@ -54,6 +60,8 @@ public class ModItems { public static Item sigilCompression; public static Item itemComponent; + + public static Item bloodShard; public static Item livingArmourHelmet; public static Item livingArmourChest; @@ -62,6 +70,8 @@ public class ModItems { public static Item altarMaker; + public static Item.ToolMaterial boundToolMaterial = EnumHelper.addToolMaterial("BoundToolMaterial", 4, 0, 12, 8, 50); + public static void init() { bloodOrb = registerItem(new ItemBloodOrb()); orbWeak = new BloodOrb("weak", 1, 5000); @@ -88,6 +98,11 @@ public class ModItems { packSelfSacrifice = registerItem(new ItemPackSelfSacrifice()); daggerOfSacrifice = registerItem(new ItemDaggerOfSacrifice()); + boundSword = registerItem(new ItemBoundSword()); + boundPickaxe = registerItem(new ItemBoundPickaxe()); + boundAxe = registerItem(new ItemBoundAxe()); + boundShovel = registerItem(new ItemBoundShovel()); + sigilDivination = registerItem(new ItemSigilDivination()); sigilAir = registerItem(new ItemSigilAir()); sigilWater = registerItem(new ItemSigilWater()); @@ -107,6 +122,8 @@ public class ModItems { sigilEnderSeverance = registerItem(new ItemSigilEnderSeverance()); itemComponent = registerItem(new ItemComponent()); + + bloodShard = registerItem(new ItemBloodShard()); livingArmourHelmet = registerItem(new ItemLivingArmour(0), "ItemLivingArmourHelmet"); livingArmourChest = registerItem(new ItemLivingArmour(1), "ItemLivingArmourChest"); @@ -152,6 +169,15 @@ public class ModItems { renderHelper.itemRender(packSelfSacrifice); renderHelper.itemRender(daggerOfSacrifice); + renderHelper.itemRender(boundSword, 0); + renderHelper.itemRender(boundSword, 1); + renderHelper.itemRender(boundPickaxe, 0); + renderHelper.itemRender(boundPickaxe, 1); + renderHelper.itemRender(boundAxe, 0); + renderHelper.itemRender(boundAxe, 1); + renderHelper.itemRender(boundShovel, 0); + renderHelper.itemRender(boundShovel, 1); + renderHelper.itemRender(sigilDivination); renderHelper.itemRender(sigilAir); renderHelper.itemRender(sigilWater); @@ -183,6 +209,9 @@ public class ModItems { for(int i = 0 ; i < ItemComponent.getNames().size() ; i++) renderHelper.itemRender(itemComponent, i); + renderHelper.itemRender(bloodShard, 0); + renderHelper.itemRender(bloodShard, 1); + renderHelper.itemRender(livingArmourHelmet); renderHelper.itemRender(livingArmourChest); renderHelper.itemRender(livingArmourLegs); diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java index 0b1df66c..06437281 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.util.handler; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import WayofTime.bloodmagic.block.BlockAltar; import WayofTime.bloodmagic.item.ItemAltarMaker; +import WayofTime.bloodmagic.item.ItemBoundSword; import WayofTime.bloodmagic.item.gear.ItemPackSacrifice; import WayofTime.bloodmagic.registry.ModBlocks; import WayofTime.bloodmagic.registry.ModItems; @@ -16,6 +17,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.event.entity.player.FillBucketEvent; import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.fml.common.eventhandler.Event; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -69,4 +71,13 @@ public class EventHandler { ChatUtil.sendNoSpam(event.entityPlayer, TextHelper.localizeEffect("chat.BloodMagic.altarMaker.destroy", altarMaker.destroyAltar(event.entityPlayer))); } } + + @SubscribeEvent + public void onBlockBreak(BlockEvent.BreakEvent event) { + if (!event.world.isRemote && event.getPlayer() != null) { + if (event.getPlayer().capabilities.isCreativeMode && event.getPlayer().getCurrentEquippedItem().getItem() instanceof ItemBoundSword) { + event.setCanceled(true); + } + } + } } diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index b41581e4..fdf4eefd 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -12,6 +12,11 @@ item.BloodMagic.pack.selfSacrifice.name=Blood Letter's Pack item.BloodMagic.pack.sacrifice.name=Coat of Arms item.BloodMagic.daggerOfSacrifice.name=Dagger of Sacrifice +item.BloodMagic.bound.sword.name=Bound Sword +item.BloodMagic.bound.pickaxe.name=Bound Pickaxe +item.BloodMagic.bound.axe.name=Bound Axe +item.BloodMagic.bound.shovel.name=Bound Shovel + item.BloodMagic.bucket.lifeEssence.name=Bucket of Life item.BloodMagic.scribe.water.name=Elemental Inscription Tool: Water @@ -60,6 +65,9 @@ item.BloodMagic.reagent.virtus.name=Virtus item.BloodMagic.reagent.reductus.name=Reductus item.BloodMagic.reagent.potentia.name=Potentia +item.BloodMagic.bloodShard.weak.name=Weak Blood Shard +item.BloodMagic.bloodShard.demon.name=Demon Blood Shard + item.BloodMagic.baseComponent.reagentWater.name=Water Reagent item.BloodMagic.baseComponent.reagentLava.name=Lava Reagent item.BloodMagic.baseComponent.reagentAir.name=Air Reagent @@ -156,6 +164,11 @@ tooltip.BloodMagic.sigil.phantomBridge.desc=&oWalking on thin air... tooltip.BloodMagic.sigil.whirlwind.desc=&oBest not to wear a skirt tooltip.BloodMagic.sigil.enderSeverance.desc=&oPutting Endermen in Dire situations! +tooltip.BloodMagic.bound.sword.desc=&oCulling the weak +tooltip.BloodMagic.bound.pickaxe.desc=&oDestroying stone without mercy +tooltip.BloodMagic.bound.axe.desc=&oDemonic deforestation +tooltip.BloodMagic.bound.shovel.desc=&oScrubs floors clean of dirt + tooltip.BloodMagic.sacrificialDagger.desc=Just a prick of the finger will suffice... tooltip.BloodMagic.slate.desc=Infused stone inside of a Blood Altar tooltip.BloodMagic.inscriber.desc=The writing is on the wall... diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBloodShard0.json b/src/main/resources/assets/bloodmagic/models/item/ItemBloodShard0.json new file mode 100644 index 00000000..14beb6a8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemBloodShard0.json @@ -0,0 +1,6 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/WeakBloodShard" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBloodShard1.json b/src/main/resources/assets/bloodmagic/models/item/ItemBloodShard1.json new file mode 100644 index 00000000..c16b9e0a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemBloodShard1.json @@ -0,0 +1,6 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/DemonBloodShard" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe0.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe0.json new file mode 100644 index 00000000..07e627a3 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe0.json @@ -0,0 +1,6 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/Item_deactivated" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe1.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe1.json new file mode 100644 index 00000000..6393fafa --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe1.json @@ -0,0 +1,18 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/BoundAxe_activated" + }, + "display": { + "thirdperson": { + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe0.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe0.json new file mode 100644 index 00000000..07e627a3 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe0.json @@ -0,0 +1,6 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/Item_deactivated" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe1.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe1.json new file mode 100644 index 00000000..42f17170 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe1.json @@ -0,0 +1,18 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/BoundPickaxe_activated" + }, + "display": { + "thirdperson": { + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel0.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel0.json new file mode 100644 index 00000000..07e627a3 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel0.json @@ -0,0 +1,6 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/Item_deactivated" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel1.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel1.json new file mode 100644 index 00000000..6d870173 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel1.json @@ -0,0 +1,18 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/BoundShovel_activated" + }, + "display": { + "thirdperson": { + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundSword0.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundSword0.json new file mode 100644 index 00000000..07e627a3 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemBoundSword0.json @@ -0,0 +1,6 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/Item_deactivated" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundSword1.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundSword1.json new file mode 100644 index 00000000..c96cc88d --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemBoundSword1.json @@ -0,0 +1,18 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/BoundSword_activated" + }, + "display": { + "thirdperson": { + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/src/main/resources/assets/bloodmagic/textures/items/BoundPickaxe_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/Item_deactivated.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/BoundPickaxe_deactivated.png rename to src/main/resources/assets/bloodmagic/textures/items/Item_deactivated.png