diff --git a/src/main/java/WayofTime/bloodmagic/api/DinnerBeforeDessert.java b/src/main/java/WayofTime/bloodmagic/api/DinnerBeforeDessert.java new file mode 100644 index 00000000..de2e9a3c --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/api/DinnerBeforeDessert.java @@ -0,0 +1,75 @@ +package WayofTime.bloodmagic.api; + +import WayofTime.bloodmagic.api.event.ItemBindEvent; +import WayofTime.bloodmagic.api.iface.IBindable; +import WayofTime.bloodmagic.api.network.SoulNetwork; +import WayofTime.bloodmagic.api.orb.IBloodOrb; +import WayofTime.bloodmagic.api.util.helper.BindableHelper; +import WayofTime.bloodmagic.api.util.helper.NBTHelper; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.api.util.helper.PlayerHelper; +import com.google.common.base.Strings; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.eventhandler.Event; + +@Deprecated +public class DinnerBeforeDessert +{ + // Temporary binding method until PlayerInteractEvent is re-implemented in Forge 1.9. + // Returns false if binding fails. + public static boolean bindMe(World world, EntityPlayer player, ItemStack stack) + { + if (stack == null) + return false; + + if (PlayerHelper.isFakePlayer(player)) + return false; + + if (!(stack.getItem() instanceof IBindable)) + return false; + + NBTHelper.checkNBT(stack); + IBindable bindable = (IBindable) stack.getItem(); + + if (Strings.isNullOrEmpty(bindable.getOwnerUUID(stack))) + { + if (bindable.onBind(player, stack)) + { + String uuid = PlayerHelper.getUUIDFromPlayer(player).toString(); + ItemBindEvent toPost = new ItemBindEvent(player, uuid, stack); + if (MinecraftForge.EVENT_BUS.post(toPost) || toPost.getResult() == Event.Result.DENY) + return false; + + BindableHelper.setItemOwnerUUID(stack, uuid); + BindableHelper.setItemOwnerName(stack, player.getDisplayNameString()); + return true; + } + } else if (bindable.getOwnerUUID(stack).equals(PlayerHelper.getUUIDFromPlayer(player).toString()) && !bindable.getOwnerName(stack).equals(player.getDisplayNameString())) + { + BindableHelper.setItemOwnerName(stack, player.getDisplayNameString()); + return true; + } + + return false; + } + + // Temporary Orb tier setting until PlayerInteractEvent is re-implemented in Forge 1.9. + public static void setOrbTier(EntityPlayer player, ItemStack stack) + { + if (stack == null) + return; + + if (!(stack.getItem() instanceof IBloodOrb)) + return; + + NBTHelper.checkNBT(stack); + IBloodOrb bloodOrb = (IBloodOrb) stack.getItem(); + SoulNetwork network = NetworkHelper.getSoulNetwork(player); + + if (bloodOrb.getOrbLevel(stack.getItemDamage()) > network.getOrbTier()) + network.setOrbTier(bloodOrb.getOrbLevel(stack.getItemDamage())); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java b/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java index 0fd8c86e..a8dbcd66 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java +++ b/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java @@ -1,11 +1,15 @@ package WayofTime.bloodmagic.api.impl; +import WayofTime.bloodmagic.api.DinnerBeforeDessert; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.iface.IBindable; import WayofTime.bloodmagic.api.util.helper.NBTHelper; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; /** * Base class for all bindable items. @@ -19,6 +23,12 @@ public class ItemBindable extends Item implements IBindable setMaxStackSize(1); } + @Override + public ActionResult onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn, EnumHand hand) { + DinnerBeforeDessert.bindMe(worldIn, playerIn, itemStackIn); + return super.onItemRightClick(itemStackIn, worldIn, playerIn, hand); + } + // IBindable @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java b/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java index c65bd928..327765e9 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java @@ -2,6 +2,7 @@ package WayofTime.bloodmagic.item; import java.util.List; +import WayofTime.bloodmagic.api.DinnerBeforeDessert; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.SoundEvents; @@ -53,6 +54,9 @@ public class ItemBloodOrb extends ItemBindableBase implements IBloodOrb, IBindab if (world == null) return super.onItemRightClick(stack, null, player, hand); + super.onItemRightClick(stack, null, player, hand); + DinnerBeforeDessert.setOrbTier(player, stack); + world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.block_fire_extinguish, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); // SpellHelper.sendIndexedParticleToAllAround(world, posX, posY, posZ, // 20, world.provider.getDimensionId(), 4, posX, posY, posZ); diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java index 87e0f4a3..82f6464b 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.item; import java.util.ArrayList; import java.util.List; +import WayofTime.bloodmagic.api.DinnerBeforeDessert; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.entity.EntityLivingBase; @@ -41,8 +42,6 @@ import javax.annotation.Nullable; public class ItemBoundSword extends ItemSword implements IBindable, IActivatable, IMeshProvider { - private float attackDamage; - public ItemBoundSword() { super(ModItems.boundToolMaterial); @@ -55,6 +54,8 @@ public class ItemBoundSword extends ItemSword implements IBindable, IActivatable @Override public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { + DinnerBeforeDessert.bindMe(world, player, stack); + if (player.isSneaking()) setActivatedState(stack, !getActivated(stack)); diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java index 0c48aea7..b55bdae0 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java @@ -5,6 +5,10 @@ import java.util.List; import java.util.Map; import java.util.Set; +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.DinnerBeforeDessert; +import WayofTime.bloodmagic.api.util.helper.PlayerHelper; +import com.google.common.base.Strings; import lombok.Getter; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -40,7 +44,6 @@ public class ItemBoundTool extends ItemTool implements IBindable, IActivatable { protected final String tooltipBase; private final String name; - private final float damage; public Map heldDownMap = new HashMap(); public Map heldDownCountMap = new HashMap(); @@ -51,10 +54,10 @@ public class ItemBoundTool extends ItemTool implements IBindable, IActivatable { super(damage, 1, ModItems.boundToolMaterial, effectiveBlocks); setUnlocalizedName(Constants.Mod.MODID + ".bound." + name); + setCreativeTab(BloodMagic.tabBloodMagic); this.name = name; this.tooltipBase = "tooltip.BloodMagic.bound." + name + "."; - this.damage = damage; } @Override @@ -111,6 +114,8 @@ public class ItemBoundTool extends ItemTool implements IBindable, IActivatable @Override public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { + DinnerBeforeDessert.bindMe(world, player, stack); + if (player.isSneaking()) setActivatedState(stack, !getActivated(stack)); @@ -182,10 +187,15 @@ public class ItemBoundTool extends ItemTool implements IBindable, IActivatable public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { if (TextHelper.canTranslate(tooltipBase + "desc")) - tooltip.add(TextHelper.localizeEffect(tooltipBase + "desc")); + tooltip.add(TextHelper.localizeEffect(tooltipBase + "desc")); tooltip.add(TextHelper.localize("tooltip.BloodMagic." + (getActivated(stack) ? "activated" : "deactivated"))); + NBTHelper.checkNBT(stack); + + if (!Strings.isNullOrEmpty(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID))) + tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack))); + super.addInformation(stack, player, tooltip, advanced); } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java b/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java index bfef04d0..723ea295 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java @@ -11,7 +11,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; @@ -68,7 +67,7 @@ public class ItemTelepositionFocus extends ItemBindableBase implements IVariantP } } - return ActionResult.newResult(EnumActionResult.FAIL, stack); + return super.onItemRightClick(stack, world, player, hand); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java index ca546a2f..53d06b4d 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java @@ -4,7 +4,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.impl.ItemSigil; +import WayofTime.bloodmagic.api.util.helper.NBTHelper; +import WayofTime.bloodmagic.api.util.helper.PlayerHelper; +import com.google.common.base.Strings; import lombok.Getter; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -29,6 +33,7 @@ public class ItemSigilBase extends ItemSigil implements IVariantProvider super(lpUsed); setUnlocalizedName(Constants.Mod.MODID + ".sigil." + name); + setCreativeTab(BloodMagic.tabBloodMagic); this.name = name; this.tooltipBase = "tooltip.BloodMagic.sigil." + name + "."; @@ -44,7 +49,12 @@ public class ItemSigilBase extends ItemSigil implements IVariantProvider public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { if (TextHelper.canTranslate(tooltipBase + "desc")) - tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect(tooltipBase + "desc")))); + tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect(tooltipBase + "desc")))); + + NBTHelper.checkNBT(stack); + + if (!Strings.isNullOrEmpty(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID))) + tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack))); super.addInformation(stack, player, tooltip, advanced); } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java index b026b87d..a0190411 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java @@ -3,9 +3,13 @@ package WayofTime.bloodmagic.item.sigil; import java.util.ArrayList; import java.util.List; +import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.impl.ItemSigilToggleable; +import WayofTime.bloodmagic.api.util.helper.NBTHelper; +import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import WayofTime.bloodmagic.client.IVariantProvider; +import com.google.common.base.Strings; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; @@ -27,6 +31,7 @@ public class ItemSigilToggleableBase extends ItemSigilToggleable implements IVar setToggleable(); setUnlocalizedName(Constants.Mod.MODID + ".sigil." + name); + setCreativeTab(BloodMagic.tabBloodMagic); this.name = name; this.tooltipBase = "tooltip.BloodMagic.sigil." + name + "."; @@ -36,11 +41,12 @@ public class ItemSigilToggleableBase extends ItemSigilToggleable implements IVar @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { + NBTHelper.checkNBT(stack); super.addInformation(stack, player, tooltip, advanced); - if (getActivated(stack)) - tooltip.add(TextHelper.localize("tooltip.BloodMagic.activated")); - else - tooltip.add(TextHelper.localize("tooltip.BloodMagic.deactivated")); + tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic." + (getActivated(stack) ? "activated" : "deactivated"))); + + if (!Strings.isNullOrEmpty(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID))) + tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack))); } @Override