Advertisement
HalestormXV

Untitled

Mar 21st, 2018
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.67 KB | None | 0 0
  1. package halestormxv.objects.items;
  2.  
  3. import halestormxv.RunicSorcery;
  4. import halestormxv.init.ItemInit;
  5. import halestormxv.utility.Reference;
  6. import halestormxv.utility.interfaces.IHasModel;
  7. import net.minecraft.entity.EntityLivingBase;
  8. import net.minecraft.entity.player.EntityPlayer;
  9. import net.minecraft.inventory.ItemStackHelper;
  10. import net.minecraft.item.EnumDyeColor;
  11. import net.minecraft.item.ItemStack;
  12. import net.minecraft.item.ItemSword;
  13. import net.minecraft.nbt.NBTBase;
  14. import net.minecraft.nbt.NBTTagCompound;
  15. import net.minecraft.util.*;
  16. import net.minecraft.world.World;
  17. import net.minecraftforge.common.capabilities.Capability;
  18. import net.minecraftforge.common.capabilities.CapabilityInject;
  19. import net.minecraftforge.common.capabilities.ICapabilityProvider;
  20. import net.minecraftforge.common.capabilities.ICapabilitySerializable;
  21. import net.minecraftforge.common.util.INBTSerializable;
  22. import net.minecraftforge.items.CapabilityItemHandler;
  23. import net.minecraftforge.items.IItemHandler;
  24. import net.minecraftforge.items.ItemStackHandler;
  25.  
  26. import javax.annotation.Nonnull;
  27. import javax.annotation.Nullable;
  28.  
  29.  
  30. public class ItemRuneBlade extends ItemSword implements IHasModel
  31. {
  32.     private static ItemStackHandler handler;
  33.     public ItemRuneBlade(String name, ToolMaterial material)
  34.     {
  35.         super(material);
  36.         setUnlocalizedName(name);
  37.         setRegistryName(name);
  38.         setCreativeTab(RunicSorcery.RUNICSORCERY_SPECIAL);
  39.         setMaxStackSize(1);
  40.         this.handler = new ItemStackHandler(4);
  41.         ItemInit.ITEMS.add(this);
  42.     }
  43.  
  44.     @Override
  45.     public void registerModels()
  46.     {
  47.         RunicSorcery.proxy.registerItemRenderer(this, 0 , "inventory");
  48.     }
  49.  
  50.     @Nonnull
  51.     @Override
  52.     public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, @Nonnull EnumHand hand)
  53.     {
  54.         ItemStack stackToSaveTo = player.getHeldItem(hand);
  55.         if(handler == null)
  56.         {
  57.             handler = (ItemStackHandler) initCapabilities(stackToSaveTo, null).getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null);
  58.         }
  59.         NBTTagCompound nbt = new NBTTagCompound();
  60.         handler.deserializeNBT(nbt);
  61.         if (!world.isRemote)
  62.         {
  63.             if (player.isSneaking())
  64.             player.openGui(RunicSorcery.instance, Reference.GUI_RUNE_BLADE, world, hand.ordinal(), -1, -1);
  65.         }
  66.  
  67.         return ActionResult.newResult(EnumActionResult.SUCCESS, player.getHeldItem(hand));
  68.     }
  69.  
  70.     public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityLivingBase entityLiving, int timeLeft)
  71.     {
  72.         handler.serializeNBT();
  73.     }
  74.  
  75.     @Override
  76.     public ICapabilityProvider initCapabilities(ItemStack item, NBTTagCompound nbt)
  77.     {
  78.         if(item.getItem() instanceof ItemRuneBlade)
  79.         {
  80.             return new RuneSlotHandler();
  81.         }
  82.         return null;
  83.     }
  84.  
  85.     public static class RuneSlotHandler implements ICapabilityProvider, INBTSerializable<NBTTagCompound>
  86.     {
  87.  
  88.         @Override
  89.         public NBTTagCompound serializeNBT()
  90.         {
  91.             return writeNBT();
  92.         }
  93.  
  94.         private NBTTagCompound writeNBT()
  95.         {
  96.             NBTTagCompound ret = new NBTTagCompound();
  97.             NBTBase inv = CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.getStorage().writeNBT(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, handler, null);
  98.             ret.setTag("RunesStored", inv);
  99.             return ret;
  100.         }
  101.  
  102.  
  103.         @Override
  104.         public void deserializeNBT(NBTTagCompound nbt)
  105.         {
  106.             if (nbt.hasKey("RunesStored"))
  107.             {
  108.                 //IItemHandler inv = new ItemStackHandler(4);
  109.                 CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.getStorage().readNBT(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, handler, null, nbt.getTag("RunesStored"));
  110.                 ItemStackHelper.saveAllItems(nbt, );
  111.             }
  112.         }
  113.  
  114.         @Override
  115.         public boolean hasCapability(Capability<?> capability, EnumFacing facing)
  116.         {
  117.             if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
  118.             {
  119.                 return true;
  120.             }
  121.             return false;
  122.         }
  123.  
  124.         @Override
  125.         public <T> T getCapability(Capability<T> capability, EnumFacing facing)
  126.         {
  127.             if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
  128.             {
  129.                 return (T) new ItemStackHandler(4/**the amount of slots you want*/);
  130.                 //This is the default implementation by forge, but you'll likely want to make your own by overriding.
  131.             }
  132.             return null;
  133.         }
  134.     }
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement