Temporary workaround for binding

Also fixes lots of things that went wonky when #684 was merged

I have no clue how much is still broken. Guess we'll find out :D
This commit is contained in:
Nick 2016-03-27 20:11:03 -07:00
parent 1aaa817e65
commit c2fe583496
8 changed files with 127 additions and 12 deletions

View file

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

View file

@ -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<ItemStack> onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn, EnumHand hand) {
DinnerBeforeDessert.bindMe(worldIn, playerIn, itemStackIn);
return super.onItemRightClick(itemStackIn, worldIn, playerIn, hand);
}
// IBindable
@Override