/*
* This file is part of Matter Overdrive
* Copyright (c) 2015., Simeon Radivoev, All rights reserved.
*
* Matter Overdrive is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Matter Overdrive is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>.
*/
package matteroverdrive.items;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import matteroverdrive.api.matter.IMatterPatternStorage;
import matteroverdrive.data.ItemPattern;
import matteroverdrive.items.includes.MOBaseItem;
import matteroverdrive.util.MatterDatabaseHelper;
import matteroverdrive.util.MatterHelper;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants;
import java.util.List;
/**
* Created by Simeon on 3/27/2015.
*/
public class PatternDrive extends MOBaseItem implements IMatterPatternStorage
{
private IIcon storageFull;
private IIcon storagePartiallyFull;
int capacity;
public PatternDrive(String name, int capacity)
{
super(name);
this.capacity = capacity;
this.setMaxStackSize(1);
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister p_94581_1_)
{
this.itemIcon = p_94581_1_.registerIcon(this.getIconString());
this.storageFull = p_94581_1_.registerIcon(this.getIconString() + "_full");
this.storagePartiallyFull = p_94581_1_.registerIcon(this.getIconString() + "_partially_full");
}
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamage(int damage)
{
switch (damage)
{
case 2:
return storageFull;
case 1:
return storagePartiallyFull;
default:
return itemIcon;
}
}
public int getDamage(ItemStack stack)
{
if (stack.hasTagCompound())
{
if (stack.getTagCompound().func_150296_c().size() > 0)
{
if (stack.getTagCompound().func_150296_c().size() < getCapacity(stack))
{
return 1;
}
else
{
return 2;
}
}
}
return 0;
}
@Override
public boolean hasDetails(ItemStack itemStack)
{
return true;
}
@Override
public void addDetails(ItemStack itemstack, EntityPlayer player, List infos)
{
if(itemstack.hasTagCompound())
{
ItemPattern[] patterns = getPatterns(itemstack);
for (int i = 0;i < patterns.length;i++)
{
ItemStack stack = patterns[i].toItemStack(false);
String displayName;
try {
displayName = stack.getDisplayName();
}
catch (Exception e)
{
displayName = "Unknown";
}
if (MatterHelper.getMatterAmountFromItem(stack) > 0)
{
infos.add(MatterDatabaseHelper.getPatternInfoColor(patterns[i].getProgress()) + displayName + " [" + patterns[i].getProgress() + "%]");
}
else
{
infos.add(EnumChatFormatting.RED + "[Invalid] " + MatterDatabaseHelper.getPatternInfoColor(patterns[i].getProgress()) + displayName + " [" + patterns[i].getProgress() + "%]");
}
if (i > 8)
{
infos.add(EnumChatFormatting.YELLOW + String.format("...and %s more patterns.",patterns.length-9));
break;
}
}
}
}
@Override
public void InitTagCompount(ItemStack stack)
{
NBTTagCompound tagCompound = new NBTTagCompound();
tagCompound.setShort(MatterDatabaseHelper.CAPACITY_TAG_NAME, (short) capacity);
NBTTagList itemList = new NBTTagList();
tagCompound.setTag(MatterDatabaseHelper.ITEMS_TAG_NAME,itemList);
stack.setTagCompound(tagCompound);
}
@Override
public ItemPattern[] getPatterns(ItemStack storage)
{
TagCompountCheck(storage);
NBTTagList tagList = storage.getTagCompound().getTagList(MatterDatabaseHelper.ITEMS_TAG_NAME, 10);
ItemPattern[] patterns = new ItemPattern[tagList.tagCount()];
for (int i = 0;i < tagList.tagCount();i++)
{
ItemPattern pattern = new ItemPattern(tagList.getCompoundTagAt(i));
patterns[i] = pattern;
}
return patterns;
}
@Override
public boolean addItem(ItemStack storage, ItemStack itemStack,int initialAmount,boolean simulate)
{
TagCompountCheck(storage);
NBTTagList patternsTagList = storage.getTagCompound().getTagList(MatterDatabaseHelper.ITEMS_TAG_NAME, Constants.NBT.TAG_COMPOUND);
if(patternsTagList.tagCount() < getCapacity(storage))
{
if(MatterHelper.CanScan(itemStack))
{
int itemProgress = MatterDatabaseHelper.getItemStackProgress(storage, itemStack);
if(itemProgress < MatterDatabaseHelper.MAX_ITEM_PROGRESS)
{
if (!simulate)
{
MatterDatabaseHelper.addProgressToPatternStorage(storage, itemStack, initialAmount,false);
}
return true;
}
}
}
return false;
}
@Override
public ItemPattern getPattern(ItemStack storage, ItemStack item)
{
TagCompountCheck(storage);
return MatterDatabaseHelper.getPatternFromStorage(storage, item);
}
@Override
public int getCapacity(ItemStack item)
{
TagCompountCheck(item);
return item.getTagCompound().getShort(MatterDatabaseHelper.CAPACITY_TAG_NAME);
}
public void clearStorage(ItemStack itemStack)
{
if (MatterHelper.isMatterPatternStorage(itemStack))
{
itemStack.setTagCompound(null);
}
}
public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player)
{
if (player.isSneaking())
{
clearStorage(itemStack);
}
return itemStack;
}
}