Advertisement
HalestormXV

Untitled

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