More inventory implementation

This commit is contained in:
Aidan Brady 2013-08-04 20:39:25 -04:00
parent 26393f8d72
commit afb563898a
3 changed files with 90 additions and 21 deletions

View file

@ -145,6 +145,16 @@ public class SetUtil
return toReturn;
}
public static <V> V getTop(Set<V> set)
{
for(V obj : set)
{
return obj;
}
return null;
}
/**
* Returns a List of a Set, while maintaining all it's objects.
* @param set - set to turn into a list

View file

@ -1,16 +1,11 @@
package resonantinduction.battery;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;
import resonantinduction.base.Vector3;
import resonantinduction.api.IBattery;
import cpw.mods.fml.common.ITickHandler;
import cpw.mods.fml.common.TickType;
@ -41,4 +36,32 @@ public class BatteryManager implements ITickHandler
{
return "BatteryMultiblockManager";
}
public static class SlotOut extends Slot
{
public SlotOut(IInventory inventory, int index, int x, int y)
{
super(inventory, index, x, y);
}
@Override
public boolean isItemValid(ItemStack itemstack)
{
return false;
}
}
public static class SlotBattery extends Slot
{
public SlotBattery(IInventory inventory, int index, int x, int y)
{
super(inventory, index, x, y);
}
@Override
public boolean isItemValid(ItemStack itemstack)
{
return itemstack.getItem() instanceof IBattery;
}
}
}

View file

@ -53,6 +53,7 @@ public class TileEntityBattery extends TileEntityBase implements IPacketReceiver
if(structure.inventory.size() < structure.getMaxCells())
{
structure.inventory.add(structure.visibleInventory[0]);
structure.visibleInventory[0] = null;
structure.sortInventory();
}
}
@ -164,20 +165,26 @@ public class TileEntityBattery extends TileEntityBase implements IPacketReceiver
public float getEnergyStored()
{
float energy = 0;
for (ItemStack itemStack : structure.inventory)
if(!worldObj.isRemote)
{
if (itemStack != null)
float energy = 0;
for (ItemStack itemStack : structure.inventory)
{
if (itemStack.getItem() instanceof IBattery)
if (itemStack != null)
{
energy += ((IBattery) itemStack.getItem()).getEnergyStored(itemStack);
if (itemStack.getItem() instanceof IBattery)
{
energy += ((IBattery) itemStack.getItem()).getEnergyStored(itemStack);
}
}
}
}
return energy;
return energy;
}
else {
return clientEnergy;
}
}
@Override
@ -186,6 +193,9 @@ public class TileEntityBattery extends TileEntityBase implements IPacketReceiver
try {
structure.isMultiblock = input.readBoolean();
clientEnergy = input.readFloat();
clientCells = input.readInt();
if(structure.isMultiblock)
{
structure.height = input.readInt();
@ -198,9 +208,12 @@ public class TileEntityBattery extends TileEntityBase implements IPacketReceiver
@Override
public ArrayList getNetworkedData(ArrayList data)
{
data.add(structure != null);
data.add(structure.isMultiblock);
if(structure != null)
data.add(getEnergyStored());
data.add(structure.inventory.size());
if(structure.isMultiblock)
{
data.add(structure.height);
data.add(structure.length);
@ -219,7 +232,17 @@ public class TileEntityBattery extends TileEntityBase implements IPacketReceiver
@Override
public ItemStack getStackInSlot(int i)
{
return null;
if(i == 0)
{
return structure.visibleInventory[0];
}
else if(i == 1)
{
return SetUtil.getTop(structure.inventory);
}
else {
return structure.visibleInventory[i-1];
}
}
@Override
@ -231,13 +254,26 @@ public class TileEntityBattery extends TileEntityBase implements IPacketReceiver
@Override
public ItemStack getStackInSlotOnClosing(int i)
{
return null;
return getStackInSlot(i);
}
@Override
public void setInventorySlotContents(int i, ItemStack itemstack)
{
if(i == 0)
{
structure.visibleInventory[0] = itemstack;
}
else if(i == 1)
{
if(itemstack == null)
{
structure.inventory.remove(SetUtil.getTop(structure.inventory));
}
}
else {
structure.visibleInventory[i-1] = itemstack;
}
}
@Override