Battery bugfixes

This commit is contained in:
Aidan Brady 2013-08-05 01:29:39 -04:00
parent 0134b505d2
commit 75b1a9804d
5 changed files with 81 additions and 31 deletions

View file

@ -18,7 +18,7 @@ public class SetUtil
Set<V> toReturn = new HashSet<V>();
List list = Arrays.asList(set.toArray());
for(int i = list.size()-1; i >= 0; i--)
for(int i = list.size(); i >= 0; i--)
{
toReturn.add((V)list.get(i));
}
@ -188,9 +188,12 @@ public class SetUtil
public static <V> V getTop(Set<V> set)
{
for(V obj : set)
{
if(obj != null)
{
return obj;
}
}
return null;
}

View file

@ -235,6 +235,7 @@ public class BatteryUpdateProtocol
if(!didVisibleInventory)
{
tile.structure.visibleInventory = oldStructure.visibleInventory;
didVisibleInventory = true;
}
}
}

View file

@ -3,7 +3,9 @@ package resonantinduction.battery;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import resonantinduction.battery.BatteryManager.SlotBattery;
import resonantinduction.battery.BatteryManager.SlotOut;
@ -38,6 +40,26 @@ public class ContainerBattery extends Container
tileEntity.playersUsing.add(inventory.player);
}
@Override
public ItemStack slotClick(int slotID, int par2, int par3, EntityPlayer par4EntityPlayer)
{
ItemStack stack = super.slotClick(slotID, par2, par3, par4EntityPlayer);
if(slotID == 1)
{
ItemStack itemstack = ((Slot)inventorySlots.get(slotID)).getStack();
ItemStack itemstack1 = itemstack == null ? null : itemstack.copy();
inventoryItemStacks.set(slotID, itemstack1);
for (int j = 0; j < this.crafters.size(); ++j)
{
((ICrafting)this.crafters.get(j)).sendSlotContents(this, slotID, itemstack1);
}
}
return stack;
}
@Override
public void onContainerClosed(EntityPlayer entityplayer)
{

View file

@ -27,11 +27,13 @@ public class SynchronizedBatteryData
public int height;
public ItemStack tempStack;
public boolean isMultiblock;
public boolean didTick;
public boolean wroteVisibleInventory;
public boolean wroteInventory;
public int getVolume()
{
@ -49,7 +51,7 @@ public class SynchronizedBatteryData
ItemStack[] toSort = new ItemStack[array.length];
for(int i = 0; i < array.length-1; i++)
for(int i = 0; i < array.length; i++)
{
toSort[i] = (ItemStack)array[i];
}

View file

@ -89,6 +89,8 @@ public class TileEntityBattery extends TileEntityBase implements IPacketReceiver
super.readFromNBT(nbtTags);
//Main inventory
if(nbtTags.hasKey("Items"))
{
NBTTagList tagList = nbtTags.getTagList("Items");
structure.inventory = new HashSet<ItemStack>();
@ -98,6 +100,7 @@ public class TileEntityBattery extends TileEntityBase implements IPacketReceiver
structure.inventory.add(ItemStack.loadItemStackFromNBT(tagCompound));
}
}
//Visible inventory
if(nbtTags.hasKey("VisibleItems"))
@ -123,6 +126,8 @@ public class TileEntityBattery extends TileEntityBase implements IPacketReceiver
{
super.writeToNBT(nbtTags);
if(!structure.wroteInventory)
{
//Inventory
NBTTagList tagList = new NBTTagList();
@ -139,8 +144,6 @@ public class TileEntityBattery extends TileEntityBase implements IPacketReceiver
nbtTags.setTag("Items", tagList);
//Visible inventory
if(!structure.wroteVisibleInventory)
{
NBTTagList tagList1 = new NBTTagList();
for(int slotCount = 0; slotCount < structure.visibleInventory.length; slotCount++)
@ -155,7 +158,8 @@ public class TileEntityBattery extends TileEntityBase implements IPacketReceiver
}
nbtTags.setTag("VisibleItems", tagList1);
structure.wroteVisibleInventory = true;
structure.wroteInventory = true;
}
}
@ -285,9 +289,15 @@ public class TileEntityBattery extends TileEntityBase implements IPacketReceiver
return structure.visibleInventory[0];
}
else if(i == 1)
{
if(!worldObj.isRemote)
{
return SetUtil.getTop(structure.inventory);
}
else {
return structure.tempStack;
}
}
else {
return structure.visibleInventory[i-1];
}
@ -338,9 +348,21 @@ public class TileEntityBattery extends TileEntityBase implements IPacketReceiver
else if(i == 1)
{
if(itemstack == null)
{
if(!worldObj.isRemote)
{
structure.inventory.remove(SetUtil.getTop(structure.inventory));
}
else {
structure.tempStack = null;
}
}
else {
if(worldObj.isRemote)
{
structure.tempStack = itemstack;
}
}
}
else {
structure.visibleInventory[i-1] = itemstack;