/*
* 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.includes;
import cofh.api.energy.IEnergyContainerItem;
import matteroverdrive.util.MOEnergyHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import java.util.List;
import static matteroverdrive.util.MOEnergyHelper.setDefaultEnergyTag;
public class MOItemEnergyContainer extends MOBaseItem implements IEnergyContainerItem
{
protected int capacity;
protected int maxReceive;
protected int maxExtract;
public MOItemEnergyContainer(String name)
{
this(name,32000);
}
public MOItemEnergyContainer(String name,int capacity)
{
this(name,capacity, capacity, capacity);
}
public MOItemEnergyContainer(String name,int capacity, int maxTransfer) {
this(name,capacity, maxTransfer, maxTransfer);
}
public MOItemEnergyContainer(String name,int capacity, int maxReceive, int maxExtract) {
super(name);
this.capacity = capacity;
this.maxReceive = maxReceive;
this.maxExtract = maxExtract;
}
@Override
public int getMaxDamage(ItemStack stack)
{
return getMaxEnergyStored(stack);
}
@Override
public boolean showDurabilityBar(ItemStack stack)
{
return true;
}
public int getDisplayDamage(ItemStack stack)
{
return getMaxEnergyStored(stack) - getEnergyStored(stack);
}
@Override
public void addDetails(ItemStack itemstack, EntityPlayer player, List infos)
{
this.TagCompountCheck(itemstack);
infos.add(EnumChatFormatting.YELLOW + MOEnergyHelper.formatEnergy(getEnergyStored(itemstack), getMaxEnergyStored(itemstack)));
}
@Override
public boolean hasDetails(ItemStack itemStack)
{
return true;
}
public MOItemEnergyContainer setCapacity(int capacity) {
this.capacity = capacity;
return this;
}
public void setMaxTransfer(int maxTransfer) {
setMaxReceive(maxTransfer);
setMaxExtract(maxTransfer);
}
public void setMaxReceive(int maxReceive) {
this.maxReceive = maxReceive;
}
public void setMaxExtract(int maxExtract) {
this.maxExtract = maxExtract;
}
/* IEnergyContainerItem */
@Override
public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) {
this.TagCompountCheck(container);
int energy = container.stackTagCompound.getInteger("Energy");
int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive));
if (!simulate)
{
energy += energyReceived;
container.stackTagCompound.setInteger("Energy", energy);
}
return energyReceived;
}
@Override
public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) {
if(container.stackTagCompound != null && container.stackTagCompound.hasKey("Energy"))
{
int energy = container.stackTagCompound.getInteger("Energy");
int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract));
if (!simulate) {
energy -= energyExtracted;
container.stackTagCompound.setInteger("Energy", energy);
}
return energyExtracted;
}
return 0;
}
protected void setEnergyStored(ItemStack container,int amount)
{
setDefaultEnergyTag(container, amount);
}
@Override
public int getEnergyStored(ItemStack container)
{
this.TagCompountCheck(container);
return container.stackTagCompound.getInteger("Energy");
}
@Override
public int getMaxEnergyStored(ItemStack container)
{
return capacity;
}
}