Advertisement
HalestormXV

Untitled

Mar 21st, 2018
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.78 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.     private static NonNullList<ItemStack> inventory = NonNullList.<ItemStack>withSize(4, ItemStack.EMPTY);
  34.  
  35.     public ItemRuneBlade(String name, ToolMaterial material)
  36.     {
  37.         super(material);
  38.         setUnlocalizedName(name);
  39.         setRegistryName(name);
  40.         setCreativeTab(RunicSorcery.RUNICSORCERY_SPECIAL);
  41.         setMaxStackSize(1);
  42.         handler = new ItemStackHandler(4);
  43.         ItemInit.ITEMS.add(this);
  44.     }
  45.  
  46.     @Override
  47.     public void registerModels()
  48.     {
  49.         RunicSorcery.proxy.registerItemRenderer(this, 0 , "inventory");
  50.     }
  51.  
  52.     @Nonnull
  53.     @Override
  54.     public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, @Nonnull EnumHand hand)
  55.     {
  56.         ItemStack stackToSaveTo = player.getHeldItem(hand);
  57.         if(handler == null)
  58.         {
  59.             handler = (ItemStackHandler) initCapabilities(stackToSaveTo, null).getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null);
  60.         }
  61.         NBTTagCompound nbt = new NBTTagCompound();
  62.         handler.deserializeNBT(nbt);
  63.         if (!world.isRemote)
  64.         {
  65.             if (player.isSneaking())
  66.             player.openGui(RunicSorcery.instance, Reference.GUI_RUNE_BLADE, world, hand.ordinal(), -1, -1);
  67.         }
  68.  
  69.         return ActionResult.newResult(EnumActionResult.SUCCESS, player.getHeldItem(hand));
  70.     }
  71.  
  72.     public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityLivingBase entityLiving, int timeLeft)
  73.     {
  74.         handler.serializeNBT();
  75.     }
  76.  
  77.     @Override
  78.     public ICapabilityProvider initCapabilities(ItemStack item, NBTTagCompound nbt)
  79.     {
  80.         if(item.getItem() instanceof ItemRuneBlade)
  81.         {
  82.             return new RuneSlotHandler();
  83.         }
  84.         return null;
  85.     }
  86.  
  87.     public static class RuneSlotHandler implements ICapabilityProvider, INBTSerializable<NBTTagCompound>
  88.     {
  89.  
  90.         @Override
  91.         public NBTTagCompound serializeNBT()
  92.         {
  93.             return writeNBT();
  94.         }
  95.  
  96.         private NBTTagCompound writeNBT()
  97.         {
  98.             NBTTagCompound ret = new NBTTagCompound();
  99.             NBTBase inv = CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.getStorage().writeNBT(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, handler, null);
  100.             ret.setTag("RunesStored", inv);
  101.             return ret;
  102.         }
  103.  
  104.  
  105.         @Override
  106.         public void deserializeNBT(NBTTagCompound nbt)
  107.         {
  108.             if (nbt.hasKey("RunesStored"))
  109.             {
  110.                 //IItemHandler inv = new ItemStackHandler(4);
  111.                 CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.getStorage().readNBT(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, handler, null, nbt.getTag("RunesStored"));
  112.                 ItemStackHelper.saveAllItems(nbt, inventory);
  113.             }
  114.         }
  115.  
  116.         @Override
  117.         public boolean hasCapability(Capability<?> capability, EnumFacing facing)
  118.         {
  119.             if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
  120.             {
  121.                 return true;
  122.             }
  123.             return false;
  124.         }
  125.  
  126.         @Override
  127.         public <T> T getCapability(Capability<T> capability, EnumFacing facing)
  128.         {
  129.             if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
  130.             {
  131.                 return (T) new ItemStackHandler(4/**the amount of slots you want*/);
  132.                 //This is the default implementation by forge, but you'll likely want to make your own by overriding.
  133.             }
  134.             return null;
  135.         }
  136.     }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement