make the storage gui an interface

This commit is contained in:
Raoul Van den Berge
2016-01-31 14:01:25 +01:00
parent 0c7a9381ac
commit 7afb7cb1fc
6 changed files with 100 additions and 156 deletions

View File

@@ -1,18 +1,18 @@
package storagecraft.container; package storagecraft.container;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import storagecraft.container.slot.SlotSpecimen; import storagecraft.container.slot.SlotSpecimen;
import storagecraft.tile.TileStorage;
public class ContainerStorage extends ContainerBase public class ContainerStorage extends ContainerBase
{ {
public ContainerStorage(EntityPlayer player, TileStorage storage) public ContainerStorage(EntityPlayer player, IInventory inventory)
{ {
super(player); super(player);
for (int i = 0; i < 9; ++i) for (int i = 0; i < 9; ++i)
{ {
addSlotToContainer(new SlotSpecimen(storage, i, 8 + (18 * i), 20)); addSlotToContainer(new SlotSpecimen(inventory, i, 8 + (18 * i), 20));
} }
addPlayerInventory(8, 129); addPlayerInventory(8, 129);

View File

@@ -9,6 +9,7 @@ import net.minecraftforge.fml.common.network.IGuiHandler;
import storagecraft.StorageCraftGUI; import storagecraft.StorageCraftGUI;
import storagecraft.container.*; import storagecraft.container.*;
import storagecraft.tile.*; import storagecraft.tile.*;
import storagecraft.storage.IStorageGui;
public class GuiHandler implements IGuiHandler public class GuiHandler implements IGuiHandler
{ {
@@ -39,7 +40,7 @@ public class GuiHandler implements IGuiHandler
case StorageCraftGUI.CONSTRUCTOR: case StorageCraftGUI.CONSTRUCTOR:
return new ContainerConstructor(player, (TileConstructor) tile); return new ContainerConstructor(player, (TileConstructor) tile);
case StorageCraftGUI.STORAGE: case StorageCraftGUI.STORAGE:
return new ContainerStorage(player, (TileStorage) tile); return new ContainerStorage(player, ((IStorageGui) tile).getInventory());
default: default:
return null; return null;
} }
@@ -81,7 +82,7 @@ public class GuiHandler implements IGuiHandler
case StorageCraftGUI.CONSTRUCTOR: case StorageCraftGUI.CONSTRUCTOR:
return new GuiConstructor((ContainerConstructor) getContainer(ID, player, tile), (TileConstructor) tile); return new GuiConstructor((ContainerConstructor) getContainer(ID, player, tile), (TileConstructor) tile);
case StorageCraftGUI.STORAGE: case StorageCraftGUI.STORAGE:
return new GuiStorage((ContainerStorage) getContainer(ID, player, tile), (TileStorage) tile); return new GuiStorage((ContainerStorage) getContainer(ID, player, tile), (IStorageGui) tile);
default: default:
return null; return null;
} }

View File

@@ -3,16 +3,13 @@ package storagecraft.gui;
import com.google.common.primitives.Ints; import com.google.common.primitives.Ints;
import java.io.IOException; import java.io.IOException;
import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.gui.GuiTextField;
import storagecraft.StorageCraft;
import storagecraft.block.EnumStorageType;
import storagecraft.container.ContainerStorage; import storagecraft.container.ContainerStorage;
import storagecraft.gui.sidebutton.SideButtonRedstoneMode; import storagecraft.gui.sidebutton.SideButtonRedstoneMode;
import storagecraft.network.MessageStoragePriorityUpdate; import storagecraft.storage.IStorageGui;
import storagecraft.tile.TileStorage;
public class GuiStorage extends GuiBase public class GuiStorage extends GuiBase
{ {
private TileStorage storage; private IStorageGui gui;
private GuiTextField priorityField; private GuiTextField priorityField;
@@ -21,20 +18,23 @@ public class GuiStorage extends GuiBase
private int barWidth = 16; private int barWidth = 16;
private int barHeight = 58; private int barHeight = 58;
public GuiStorage(ContainerStorage container, TileStorage storage) public GuiStorage(ContainerStorage container, IStorageGui gui)
{ {
super(container, 176, 211); super(container, 176, 211);
this.storage = storage; this.gui = gui;
} }
@Override @Override
public void init(int x, int y) public void init(int x, int y)
{ {
addSideButton(new SideButtonRedstoneMode(storage)); if (gui.getRedstoneModeSetting() != null)
{
addSideButton(new SideButtonRedstoneMode(gui.getRedstoneModeSetting()));
}
priorityField = new GuiTextField(0, fontRendererObj, x + 116 + 1, y + 54 + 1, 25, fontRendererObj.FONT_HEIGHT); priorityField = new GuiTextField(0, fontRendererObj, x + 116 + 1, y + 54 + 1, 25, fontRendererObj.FONT_HEIGHT);
priorityField.setText(String.valueOf(storage.getPriority())); priorityField.setText(String.valueOf(gui.getStorage().getPriority()));
priorityField.setEnableBackgroundDrawing(false); priorityField.setEnableBackgroundDrawing(false);
priorityField.setVisible(true); priorityField.setVisible(true);
priorityField.setTextColor(16777215); priorityField.setTextColor(16777215);
@@ -54,7 +54,7 @@ public class GuiStorage extends GuiBase
drawTexture(x, y, 0, 0, xSize, ySize); drawTexture(x, y, 0, 0, xSize, ySize);
int barHeightNew = storage.getStoredScaled(barHeight); int barHeightNew = (int) ((float) gui.getStored() / (float) gui.getCapacity() * (float) barHeight);
drawTexture(x + barX, y + barY + barHeight - barHeightNew, 179, 0 + (barHeight - barHeightNew), barWidth, barHeightNew); drawTexture(x + barX, y + barY + barHeight - barHeightNew, 179, 0 + (barHeight - barHeightNew), barWidth, barHeightNew);
@@ -64,21 +64,21 @@ public class GuiStorage extends GuiBase
@Override @Override
public void drawForeground(int mouseX, int mouseY) public void drawForeground(int mouseX, int mouseY)
{ {
drawString(7, 7, t("block.storagecraft:storage." + storage.getType().getId() + ".name")); drawString(7, 7, t(gui.getName()));
drawString(7, 42, t("misc.storagecraft:storage")); drawString(7, 42, t("misc.storagecraft:storage"));
drawString(115, 42, t("misc.storagecraft:priority")); drawString(115, 42, t("misc.storagecraft:priority"));
drawString(7, 117, t("container.inventory")); drawString(7, 117, t("container.inventory"));
drawString(30, 54, t("misc.storagecraft:storage.stored", storage.getStored())); drawString(30, 54, t("misc.storagecraft:storage.stored", gui.getStored()));
if (storage.getType() != EnumStorageType.TYPE_CREATIVE) if (gui.getCapacity() != -1)
{ {
drawString(30, 64, t("misc.storagecraft:storage.capacity", storage.getType().getCapacity())); drawString(30, 64, t("misc.storagecraft:storage.capacity", gui.getCapacity()));
} }
if (inBounds(barX, barY, barWidth, barHeight, mouseX, mouseY)) if (inBounds(barX, barY, barWidth, barHeight, mouseX, mouseY))
{ {
drawTooltip(mouseX, mouseY, t("misc.storagecraft:storage.full", storage.getStoredScaled(100))); drawTooltip(mouseX, mouseY, t("misc.storagecraft:storage.full", (int) ((float) gui.getStored() / (float) gui.getCapacity() * 100f)));
} }
} }
@@ -91,7 +91,7 @@ public class GuiStorage extends GuiBase
if (result != null) if (result != null)
{ {
StorageCraft.NETWORK.sendToServer(new MessageStoragePriorityUpdate(storage, result)); gui.getPriorityHandler().onPriorityChanged(result);
} }
} }
else else

View File

@@ -18,11 +18,11 @@ public class MessageStoragePriorityUpdate extends MessageHandlerPlayerToServer<M
{ {
} }
public MessageStoragePriorityUpdate(TileStorage storage, int priority) public MessageStoragePriorityUpdate(BlockPos pos, int priority)
{ {
this.x = storage.getPos().getX(); this.x = pos.getX();
this.y = storage.getPos().getY(); this.y = pos.getY();
this.z = storage.getPos().getZ(); this.z = pos.getZ();
this.priority = priority; this.priority = priority;
} }

View File

@@ -0,0 +1,26 @@
package storagecraft.storage;
import net.minecraft.inventory.IInventory;
import storagecraft.tile.IRedstoneModeSetting;
public interface IStorageGui
{
public interface IPriorityHandler
{
public void onPriorityChanged(int priority);
}
public String getName();
public IStorage getStorage();
public IInventory getInventory();
public IRedstoneModeSetting getRedstoneModeSetting();
public int getStored();
public int getCapacity();
public IPriorityHandler getPriorityHandler();
}

View File

@@ -2,25 +2,24 @@ package storagecraft.tile;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import java.util.List; import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.IChatComponent;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
import storagecraft.StorageCraft;
import storagecraft.block.BlockStorage; import storagecraft.block.BlockStorage;
import storagecraft.block.EnumStorageType; import storagecraft.block.EnumStorageType;
import storagecraft.inventory.InventorySimple; 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.NBTStorage; import storagecraft.storage.NBTStorage;
import storagecraft.storage.StorageItem; import storagecraft.storage.StorageItem;
import storagecraft.util.InventoryUtils; import storagecraft.util.InventoryUtils;
public class TileStorage extends TileMachine implements IStorageProvider, IStorage, IInventory, ISidedInventory public class TileStorage extends TileMachine implements IStorageProvider, IStorage, IStorageGui
{ {
public static final String NBT_STORAGE = "Storage"; public static final String NBT_STORAGE = "Storage";
public static final String NBT_PRIORITY = "Priority"; public static final String NBT_PRIORITY = "Priority";
@@ -56,7 +55,7 @@ public class TileStorage extends TileMachine implements IStorageProvider, IStora
{ {
super.readFromNBT(nbt); super.readFromNBT(nbt);
InventoryUtils.restoreInventory(this, nbt); InventoryUtils.restoreInventory(inventory, nbt);
if (nbt.hasKey(NBT_STORAGE)) if (nbt.hasKey(NBT_STORAGE))
{ {
@@ -80,41 +79,11 @@ public class TileStorage extends TileMachine implements IStorageProvider, IStora
nbt.setInteger(NBT_PRIORITY, priority); nbt.setInteger(NBT_PRIORITY, priority);
} }
public NBTStorage getStorage()
{
return new NBTStorage(tag, getType().getCapacity(), priority);
}
public EnumStorageType getType() public EnumStorageType getType()
{ {
return ((EnumStorageType) worldObj.getBlockState(pos).getValue(BlockStorage.TYPE)); return ((EnumStorageType) worldObj.getBlockState(pos).getValue(BlockStorage.TYPE));
} }
public int getStored()
{
return stored;
}
public int getStoredScaled(int scale)
{
if (getType() == EnumStorageType.TYPE_CREATIVE)
{
return 0;
}
return (int) ((float) getStored() / (float) getType().getCapacity() * (float) scale);
}
public int getPriority()
{
return priority;
}
public void setPriority(int priority)
{
this.priority = priority;
}
@Override @Override
public void toBytes(ByteBuf buf) public void toBytes(ByteBuf buf)
{ {
@@ -165,125 +134,73 @@ public class TileStorage extends TileMachine implements IStorageProvider, IStora
return getStorage().canPush(stack); return getStorage().canPush(stack);
} }
@Override
public int getSizeInventory()
{
return inventory.getSizeInventory();
}
@Override
public ItemStack getStackInSlot(int slot)
{
return inventory.getStackInSlot(slot);
}
@Override
public ItemStack decrStackSize(int slot, int count)
{
return inventory.decrStackSize(slot, count);
}
@Override
public ItemStack removeStackFromSlot(int slot)
{
return inventory.removeStackFromSlot(slot);
}
@Override
public void setInventorySlotContents(int slot, ItemStack stack)
{
inventory.setInventorySlotContents(slot, stack);
}
@Override
public int getInventoryStackLimit()
{
return inventory.getInventoryStackLimit();
}
@Override
public boolean isUseableByPlayer(EntityPlayer player)
{
return inventory.isUseableByPlayer(player);
}
@Override
public void openInventory(EntityPlayer player)
{
inventory.openInventory(player);
}
@Override
public void closeInventory(EntityPlayer player)
{
inventory.closeInventory(player);
}
@Override
public boolean isItemValidForSlot(int slot, ItemStack stack)
{
return inventory.isItemValidForSlot(slot, stack);
}
@Override
public int getField(int id)
{
return inventory.getField(id);
}
@Override
public void setField(int id, int value)
{
inventory.setField(id, value);
}
@Override
public int getFieldCount()
{
return inventory.getFieldCount();
}
@Override
public void clear()
{
inventory.clear();
}
@Override @Override
public String getName() public String getName()
{ {
return inventory.getName(); return "block.storagecraft:storage." + getType().getId() + ".name";
} }
@Override @Override
public boolean hasCustomName() public IInventory getInventory()
{ {
return inventory.hasCustomName(); return inventory;
} }
@Override @Override
public IChatComponent getDisplayName() public IRedstoneModeSetting getRedstoneModeSetting()
{ {
return inventory.getDisplayName(); return this;
} }
@Override @Override
public int[] getSlotsForFace(EnumFacing side) public IPriorityHandler getPriorityHandler()
{ {
return new int[] return new IPriorityHandler()
{ {
@Override
public void onPriorityChanged(int priority)
{
StorageCraft.NETWORK.sendToServer(new MessageStoragePriorityUpdate(pos, priority));
}
}; };
} }
@Override @Override
public boolean canInsertItem(int slot, ItemStack stack, EnumFacing direction) public NBTStorage getStorage()
{ {
return false; return new NBTStorage(tag, getCapacity(), priority);
} }
@Override @Override
public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) public int getPriority()
{ {
return false; return priority;
}
public void setPriority(int priority)
{
this.priority = priority;
}
@Override
public int getStored()
{
return stored;
}
public int getStoredScaled(int scale)
{
if (getType() == EnumStorageType.TYPE_CREATIVE)
{
return 0;
}
return (int) ((float) getStored() / (float) getCapacity() * (float) scale);
}
@Override
public int getCapacity()
{
return getType().getCapacity();
} }
} }