external storage has nice storage GUI now too

This commit is contained in:
Raoul Van den Berge
2016-01-31 14:26:09 +01:00
parent 7afb7cb1fc
commit 5601b26dc2
9 changed files with 168 additions and 91 deletions

View File

@@ -5,7 +5,6 @@ public final class StorageCraftGUI
public static final int CONTROLLER = 0; public static final int CONTROLLER = 0;
public static final int GRID = 1; public static final int GRID = 1;
public static final int DRIVE = 2; public static final int DRIVE = 2;
public static final int EXTERNAL_STORAGE = 3;
public static final int IMPORTER = 4; public static final int IMPORTER = 4;
public static final int EXPORTER = 5; public static final int EXPORTER = 5;
public static final int DETECTOR = 6; public static final int DETECTOR = 6;

View File

@@ -28,7 +28,7 @@ public class BlockExternalStorage extends BlockMachine
{ {
if (!world.isRemote) if (!world.isRemote)
{ {
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.EXTERNAL_STORAGE, world, pos.getX(), pos.getY(), pos.getZ()); player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.STORAGE, world, pos.getX(), pos.getY(), pos.getZ());
} }
return true; return true;

View File

@@ -1,13 +0,0 @@
package storagecraft.container;
import net.minecraft.entity.player.EntityPlayer;
public class ContainerExternalStorage extends ContainerBase
{
public ContainerExternalStorage(EntityPlayer player)
{
super(player);
addPlayerInventory(8, 50);
}
}

View File

@@ -1,43 +0,0 @@
package storagecraft.gui;
import storagecraft.container.ContainerExternalStorage;
import storagecraft.gui.sidebutton.SideButtonRedstoneMode;
import storagecraft.tile.TileExternalStorage;
public class GuiExternalStorage extends GuiBase
{
private TileExternalStorage externalStorage;
public GuiExternalStorage(ContainerExternalStorage container, TileExternalStorage externalStorage)
{
super(container, 176, 131);
this.externalStorage = externalStorage;
}
@Override
public void init(int x, int y)
{
addSideButton(new SideButtonRedstoneMode(externalStorage));
}
@Override
public void update(int x, int y)
{
}
@Override
public void drawBackground(int x, int y, int mouseX, int mouseY)
{
bindTexture("gui/external_storage.png");
drawTexture(x, y, 0, 0, xSize, ySize);
}
@Override
public void drawForeground(int mouseX, int mouseY)
{
drawString(7, 7, t("gui.storagecraft:external_storage"));
drawString(7, 39, t("container.inventory"));
}
}

View File

@@ -8,8 +8,8 @@ import net.minecraft.world.World;
import net.minecraftforge.fml.common.network.IGuiHandler; import net.minecraftforge.fml.common.network.IGuiHandler;
import storagecraft.StorageCraftGUI; import storagecraft.StorageCraftGUI;
import storagecraft.container.*; import storagecraft.container.*;
import storagecraft.tile.*;
import storagecraft.storage.IStorageGui; import storagecraft.storage.IStorageGui;
import storagecraft.tile.*;
public class GuiHandler implements IGuiHandler public class GuiHandler implements IGuiHandler
{ {
@@ -23,8 +23,6 @@ public class GuiHandler implements IGuiHandler
return new ContainerGrid(player, (TileGrid) tile); return new ContainerGrid(player, (TileGrid) tile);
case StorageCraftGUI.DRIVE: case StorageCraftGUI.DRIVE:
return new ContainerDrive(player, (TileDrive) tile); return new ContainerDrive(player, (TileDrive) tile);
case StorageCraftGUI.EXTERNAL_STORAGE:
return new ContainerExternalStorage(player);
case StorageCraftGUI.IMPORTER: case StorageCraftGUI.IMPORTER:
return new ContainerImporter(player, (TileImporter) tile); return new ContainerImporter(player, (TileImporter) tile);
case StorageCraftGUI.EXPORTER: case StorageCraftGUI.EXPORTER:
@@ -65,8 +63,6 @@ public class GuiHandler implements IGuiHandler
return new GuiGrid((ContainerGrid) getContainer(ID, player, tile), (TileGrid) tile); return new GuiGrid((ContainerGrid) getContainer(ID, player, tile), (TileGrid) tile);
case StorageCraftGUI.DRIVE: case StorageCraftGUI.DRIVE:
return new GuiDrive((ContainerDrive) getContainer(ID, player, tile), (TileDrive) tile); return new GuiDrive((ContainerDrive) getContainer(ID, player, tile), (TileDrive) tile);
case StorageCraftGUI.EXTERNAL_STORAGE:
return new GuiExternalStorage((ContainerExternalStorage) getContainer(ID, player, tile), (TileExternalStorage) tile);
case StorageCraftGUI.IMPORTER: case StorageCraftGUI.IMPORTER:
return new GuiImporter((ContainerImporter) getContainer(ID, player, tile), (TileImporter) tile); return new GuiImporter((ContainerImporter) getContainer(ID, player, tile), (TileImporter) tile);
case StorageCraftGUI.EXPORTER: case StorageCraftGUI.EXPORTER:

View File

@@ -5,6 +5,7 @@ import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockPos; import net.minecraft.util.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import storagecraft.tile.TileExternalStorage;
import storagecraft.tile.TileStorage; import storagecraft.tile.TileStorage;
public class MessageStoragePriorityUpdate extends MessageHandlerPlayerToServer<MessageStoragePriorityUpdate> implements IMessage public class MessageStoragePriorityUpdate extends MessageHandlerPlayerToServer<MessageStoragePriorityUpdate> implements IMessage
@@ -53,5 +54,9 @@ public class MessageStoragePriorityUpdate extends MessageHandlerPlayerToServer<M
{ {
((TileStorage) tile).setPriority(message.priority); ((TileStorage) tile).setPriority(message.priority);
} }
else if (tile instanceof TileExternalStorage)
{
((TileExternalStorage) tile).setPriority(message.priority);
}
} }
} }

View File

@@ -1,27 +1,32 @@
package storagecraft.tile; package storagecraft.tile;
import io.netty.buffer.ByteBuf;
import java.util.List; import java.util.List;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import storagecraft.StorageCraft;
import storagecraft.inventory.InventorySimple;
import storagecraft.network.MessageStoragePriorityUpdate;
import storagecraft.storage.IStorage; import storagecraft.storage.IStorage;
import storagecraft.storage.IStorageGui;
import storagecraft.storage.IStorageProvider; import storagecraft.storage.IStorageProvider;
import storagecraft.storage.StorageItem; import storagecraft.storage.StorageItem;
import storagecraft.util.InventoryUtils; import storagecraft.util.InventoryUtils;
public class TileExternalStorage extends TileMachine implements IStorageProvider, IStorage public class TileExternalStorage extends TileMachine implements IStorageProvider, IStorage, IStorageGui
{ {
public IInventory getInventory() public static final String NBT_PRIORITY = "Priority";
{
TileEntity tile = worldObj.getTileEntity(pos.offset(getDirection()));
if (tile instanceof IInventory) private InventorySimple inventory = new InventorySimple("external_storage", 9);
{
return (IInventory) tile;
}
return null; private int priority = 0;
}
@SideOnly(Side.CLIENT)
private int stored = 0;
@Override @Override
public int getEnergyUsage() public int getEnergyUsage()
@@ -37,15 +42,15 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
@Override @Override
public void addItems(List<StorageItem> items) public void addItems(List<StorageItem> items)
{ {
IInventory inventory = getInventory(); IInventory connectedInventory = getConnectedInventory();
if (inventory != null) if (connectedInventory != null)
{ {
for (int i = 0; i < inventory.getSizeInventory(); ++i) for (int i = 0; i < connectedInventory.getSizeInventory(); ++i)
{ {
if (inventory.getStackInSlot(i) != null) if (connectedInventory.getStackInSlot(i) != null)
{ {
items.add(new StorageItem(inventory.getStackInSlot(i))); items.add(new StorageItem(connectedInventory.getStackInSlot(i)));
} }
} }
} }
@@ -54,31 +59,31 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
@Override @Override
public void push(ItemStack stack) public void push(ItemStack stack)
{ {
IInventory inventory = getInventory(); IInventory connectedInventory = getConnectedInventory();
if (inventory == null) if (connectedInventory == null)
{ {
return; return;
} }
InventoryUtils.pushToInventory(inventory, stack); InventoryUtils.pushToInventory(connectedInventory, stack);
} }
@Override @Override
public ItemStack take(ItemStack stack, int flags) public ItemStack take(ItemStack stack, int flags)
{ {
IInventory inventory = getInventory(); IInventory connectedInventory = getConnectedInventory();
if (inventory == null) if (connectedInventory == null)
{ {
return null; return null;
} }
int quantity = stack.stackSize; int quantity = stack.stackSize;
for (int i = 0; i < inventory.getSizeInventory(); ++i) for (int i = 0; i < connectedInventory.getSizeInventory(); ++i)
{ {
ItemStack slot = inventory.getStackInSlot(i); ItemStack slot = connectedInventory.getStackInSlot(i);
if (slot != null && InventoryUtils.compareStack(slot, stack, flags)) if (slot != null && InventoryUtils.compareStack(slot, stack, flags))
{ {
@@ -91,7 +96,7 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
if (slot.stackSize == 0) if (slot.stackSize == 0)
{ {
inventory.setInventorySlotContents(i, null); connectedInventory.setInventorySlotContents(i, null);
} }
ItemStack newItem = slot.copy(); ItemStack newItem = slot.copy();
@@ -108,21 +113,78 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
@Override @Override
public boolean canPush(ItemStack stack) public boolean canPush(ItemStack stack)
{ {
IInventory inventory = getInventory(); IInventory connectedInventory = getConnectedInventory();
if (inventory == null) if (connectedInventory == null)
{ {
return false; return false;
} }
return InventoryUtils.canPushToInventory(inventory, stack); return InventoryUtils.canPushToInventory(connectedInventory, stack);
}
public IInventory getConnectedInventory()
{
TileEntity tile = worldObj.getTileEntity(pos.offset(getDirection()));
if (tile instanceof IInventory)
{
return (IInventory) tile;
}
return null;
}
@Override
public void toBytes(ByteBuf buf)
{
super.toBytes(buf);
buf.writeInt(priority);
buf.writeInt(getConnectedInventory() == null ? 0 : InventoryUtils.getInventoryItems(getConnectedInventory()));
}
@Override
public void fromBytes(ByteBuf buf)
{
super.fromBytes(buf);
priority = buf.readInt();
stored = buf.readInt();
}
@Override
public void readFromNBT(NBTTagCompound nbt)
{
super.readFromNBT(nbt);
InventoryUtils.restoreInventory(inventory, nbt);
if (nbt.hasKey(NBT_PRIORITY))
{
priority = nbt.getInteger(NBT_PRIORITY);
}
}
@Override
public void writeToNBT(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
InventoryUtils.saveInventory(inventory, nbt);
nbt.setInteger(NBT_PRIORITY, priority);
} }
@Override @Override
public int getPriority() public int getPriority()
{ {
// @TODO: Priority on this stuff return priority;
return 0; }
public void setPriority(int priority)
{
this.priority = priority;
} }
@Override @Override
@@ -130,4 +192,58 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
{ {
storages.add(this); storages.add(this);
} }
@Override
public String getName()
{
return "gui.storagecraft:external_storage";
}
@Override
public IStorage getStorage()
{
return this;
}
@Override
public IRedstoneModeSetting getRedstoneModeSetting()
{
return this;
}
@Override
public int getStored()
{
return stored;
}
@Override
public int getCapacity()
{
if (getConnectedInventory() == null)
{
return 0;
}
return getConnectedInventory().getSizeInventory() * 64;
}
@Override
public IPriorityHandler getPriorityHandler()
{
return new IPriorityHandler()
{
@Override
public void onPriorityChanged(int priority)
{
StorageCraft.NETWORK.sendToServer(new MessageStoragePriorityUpdate(pos, priority));
}
};
}
@Override
public IInventory getInventory()
{
return inventory;
}
} }

View File

@@ -199,6 +199,23 @@ public class InventoryUtils
return toGo == 0; return toGo == 0;
} }
public static int getInventoryItems(IInventory inventory)
{
int size = 0;
for (int i = 0; i < inventory.getSizeInventory(); ++i)
{
ItemStack slot = inventory.getStackInSlot(i);
if (slot != null)
{
size += slot.stackSize;
}
}
return size;
}
public static boolean compareStack(ItemStack first, ItemStack second) public static boolean compareStack(ItemStack first, ItemStack second)
{ {
return compareStack(first, second, COMPARE_NBT | COMPARE_DAMAGE | COMPARE_QUANTITY); return compareStack(first, second, COMPARE_NBT | COMPARE_DAMAGE | COMPARE_QUANTITY);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB