diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java index eec76073e..cb610c09b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java @@ -27,4 +27,5 @@ public final class RSBlocks { public static final BlockFluidInterface FLUID_INTERFACE = new BlockFluidInterface(); public static final BlockFluidStorage FLUID_STORAGE = new BlockFluidStorage(); public static final BlockDiskManipulator DISK_MANIPULATOR = new BlockDiskManipulator(); + public static final BlockReader READER = new BlockReader(); } \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java b/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java index 6a7426b7b..8d617e57f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java @@ -25,4 +25,5 @@ public final class RSGui { public static final int FLUID_STORAGE = 21; public static final int DISK_MANIPULATOR = 22; public static final int WIRELESS_CRAFTING_MONITOR = 23; + public static final int READER_WRITER = 24; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetworkMaster.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetworkMaster.java index 5418f79ff..4a4c92648 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetworkMaster.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetworkMaster.java @@ -232,14 +232,6 @@ public interface INetworkMaster { */ void addReaderWriterChannel(String name); - /** - * Renames a reader writer channel. - * - * @param oldName the old name - * @param newName the new name - */ - void renameReaderWriterChannel(String oldName, String newName); - /** * Removes a reader writer channel. * diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java new file mode 100755 index 000000000..3f7c3d805 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java @@ -0,0 +1,38 @@ +package com.raoulvdberge.refinedstorage.block; + +import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.RSGui; +import com.raoulvdberge.refinedstorage.tile.TileReader; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockReader extends BlockNode { + public BlockReader() { + super("reader"); + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (!world.isRemote) { + player.openGui(RS.INSTANCE, RSGui.READER_WRITER, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) { + return new TileReader(); + } + + @Override + public EnumPlacementType getPlacementType() { + return EnumPlacementType.ANY; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerReaderWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerReaderWriter.java new file mode 100755 index 000000000..7bab33807 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerReaderWriter.java @@ -0,0 +1,12 @@ +package com.raoulvdberge.refinedstorage.container; + +import com.raoulvdberge.refinedstorage.tile.TileBase; +import net.minecraft.entity.player.EntityPlayer; + +public class ContainerReaderWriter extends ContainerBase { + public ContainerReaderWriter(TileBase tile, EntityPlayer player) { + super(tile, player); + + addPlayerInventory(8, 127); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java index 0380f1fb8..6b239cb21 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java @@ -116,8 +116,7 @@ public class GuiCraftingMonitor extends GuiBase { RenderHelper.enableGUIStandardItemLighting(); - int ox = 8; - int x = ox; + int x = 8; int y = 20; itemSelectedX = -1; @@ -139,7 +138,6 @@ public class GuiCraftingMonitor extends GuiBase { element.draw(x, y, drawers); - x = ox; y += ITEM_HEIGHT; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java index a34daf11f..06a8980a6 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java @@ -62,6 +62,8 @@ public class GuiHandler implements IGuiHandler { return new ContainerFluidStorage((TileFluidStorage) tile, player); case RSGui.DISK_MANIPULATOR: return new ContainerDiskManipulator((TileDiskManipulator) tile, player); + case RSGui.READER_WRITER: + return new ContainerReaderWriter((TileBase) tile, player); default: return null; } @@ -133,6 +135,8 @@ public class GuiHandler implements IGuiHandler { return new GuiDiskManipulator((ContainerDiskManipulator) getContainer(ID, player, tile)); case RSGui.WIRELESS_CRAFTING_MONITOR: return getWirelessCraftingMonitorGui(player, x, y); + case RSGui.READER_WRITER: + return new GuiReaderWriter((ContainerReaderWriter) getContainer(ID, player, tile), (IReaderWriterGui) tile); default: return null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java new file mode 100755 index 000000000..c189892b0 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java @@ -0,0 +1,167 @@ +package com.raoulvdberge.refinedstorage.gui; + +import com.raoulvdberge.refinedstorage.container.ContainerReaderWriter; +import com.raoulvdberge.refinedstorage.tile.IReaderWriterGui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.renderer.GlStateManager; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class GuiReaderWriter extends GuiBase { + private static final int VISIBLE_ROWS = 4; + + private static final int ITEM_WIDTH = 143; + private static final int ITEM_HEIGHT = 18; + + private GuiButton add; + private GuiButton remove; + private GuiTextField name; + private IReaderWriterGui readerWriter; + + private int itemSelected = -1; + + private int itemSelectedX = -1; + private int itemSelectedY = -1; + + public GuiReaderWriter(ContainerReaderWriter container, IReaderWriterGui readerWriter) { + super(container, 176, 209); + + this.readerWriter = readerWriter; + this.scrollbar = new Scrollbar(157, 39, 12, 71); + } + + @Override + public void init(int x, int y) { + add = addButton(x + 128, y + 15, 20, 20, "+"); + remove = addButton(x + 150, y + 15, 20, 20, "-"); + name = new GuiTextField(0, fontRendererObj, x + 8 + 1, y + 20 + 1, 107, fontRendererObj.FONT_HEIGHT); + name.setEnableBackgroundDrawing(false); + name.setVisible(true); + name.setTextColor(16777215); + name.setCanLoseFocus(true); + name.setFocused(false); + } + + @Override + public void update(int x, int y) { + scrollbar.setEnabled(getRows() > VISIBLE_ROWS); + scrollbar.setMaxOffset(getRows() - VISIBLE_ROWS); + + if (itemSelected >= getChannels().size()) { + itemSelected = -1; + } + } + + private int getRows() { + return getChannels().size(); + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) { + bindTexture("gui/readerwriter.png"); + + drawTexture(x, y, 0, 0, width, height); + + if (itemSelectedX != -1 && + itemSelectedY != -1 && + itemSelected >= 0 && + itemSelected < getChannels().size()) { + drawTexture(x + itemSelectedX, y + itemSelectedY, 0, 216, ITEM_WIDTH, ITEM_HEIGHT); + } + + name.drawTextBox(); + } + + @Override + public void drawForeground(int mouseX, int mouseY) { + drawString(7, 7, t(readerWriter.getTitle())); + drawString(7, 115, t("container.inventory")); + + int x = 8; + int y = 39; + + int item = scrollbar.getOffset(); + + for (int i = 0; i < VISIBLE_ROWS; ++i) { + if (item < getChannels().size()) { + if (item == itemSelected) { + itemSelectedX = x; + itemSelectedY = y; + } + + float scale = 0.5f; + + GlStateManager.pushMatrix(); + GlStateManager.scale(scale, scale, 1); + + drawString(calculateOffsetOnScale(x + 5, scale), calculateOffsetOnScale(y + 7, scale), getChannels().get(item)); + + GlStateManager.popMatrix(); + + y += ITEM_HEIGHT; + } + + item++; + } + } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { + super.mouseClicked(mouseX, mouseY, mouseButton); + + name.mouseClicked(mouseX, mouseY, mouseButton); + + itemSelected = -1; + + if (mouseButton == 0 && inBounds(8, 39, 144, 73, mouseX - guiLeft, mouseY - guiTop)) { + int item = scrollbar.getOffset(); + + for (int i = 0; i < VISIBLE_ROWS; ++i) { + int ix = 8; + int iy = 39 + (i * ITEM_HEIGHT); + + if (inBounds(ix, iy, ITEM_WIDTH, ITEM_HEIGHT, mouseX - guiLeft, mouseY - guiTop) && (item + i) < getChannels().size()) { + itemSelected = item + i; + } + } + } + } + + + @Override + protected void keyTyped(char character, int keyCode) throws IOException { + if (!checkHotbarKeys(keyCode) && name.textboxKeyTyped(character, keyCode)) { + // NO OP + } else { + super.keyTyped(character, keyCode); + } + } + + @Override + protected void actionPerformed(GuiButton button) throws IOException { + super.actionPerformed(button); + + if (button == add) { + + } else if (button == remove) { + + } + } + + private List tempChannels; + + private List getChannels() { + if (tempChannels == null) { + tempChannels = new ArrayList<>(); + + for (int i = 0; i < 40; ++i) { + tempChannels.add("Item " + i); + } + } + + return tempChannels; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 61dd308b8..6a8bbbce1 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -128,6 +128,7 @@ public class ProxyCommon { registerTile(TileFluidInterface.class, "fluid_interface"); registerTile(TileFluidStorage.class, "fluid_storage"); registerTile(TileDiskManipulator.class, "disk_manipulator"); + registerTile(TileReader.class, "reader"); registerBlock(RSBlocks.CONTROLLER); registerBlock(RSBlocks.GRID); @@ -153,6 +154,7 @@ public class ProxyCommon { registerBlock(RSBlocks.NETWORK_TRANSMITTER); registerBlock(RSBlocks.NETWORK_RECEIVER); registerBlock(RSBlocks.DISK_MANIPULATOR); + registerBlock(RSBlocks.READER); registerItem(RSItems.QUARTZ_ENRICHED_IRON); registerItem(RSItems.STORAGE_DISK); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriterGui.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriterGui.java new file mode 100755 index 000000000..716ce3805 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriterGui.java @@ -0,0 +1,9 @@ +package com.raoulvdberge.refinedstorage.tile; + +public interface IReaderWriterGui { + String getTitle(); + + void onAdd(String name); + + void onRemove(String name); +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java index 740fb47d0..fdf89e2dd 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java @@ -573,13 +573,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR readerWriterChannels.put(name, API.instance().createReaderWriterChannel(this)); } - @Override - public void renameReaderWriterChannel(String oldName, String newName) { - readerWriterChannels.put(newName, readerWriterChannels.get(oldName)); - - removeReaderWriterChannel(oldName); - } - @Override public void removeReaderWriterChannel(String name) { readerWriterChannels.remove(name); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java index d330d1d00..b3a67d130 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java @@ -2,7 +2,7 @@ package com.raoulvdberge.refinedstorage.tile; import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReader; -public class TileReader extends TileNode implements IReader { +public class TileReader extends TileNode implements IReader, IReaderWriterGui { @Override public int getEnergyUsage() { return 0; // @TODO @@ -16,4 +16,19 @@ public class TileReader extends TileNode implements IReader { public int getRedstoneStrength() { return worldObj.getRedstonePower(pos, getDirection().getOpposite()); } + + @Override + public String getTitle() { + return "gui.refinedstorage:reader"; + } + + @Override + public void onAdd(String name) { + // @TODO + } + + @Override + public void onRemove(String name) { + // @TODO + } } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 9ab8cc8d5..7748ddca3 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -52,6 +52,7 @@ gui.refinedstorage:crafting_preview.missing=Missing: %d gui.refinedstorage:crafting_preview.circular=Circular dependency! gui.refinedstorage:crafting_preview.loop=Loop in processing... gui.refinedstorage:crafting_preview.force_start=Press CTRL + SHIFT to start anyway +gui.refinedstorage:reader=Reader misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -179,6 +180,7 @@ block.refinedstorage:fluid_storage.1.name=128k Fluid Storage Block block.refinedstorage:fluid_storage.2.name=256k Fluid Storage Block block.refinedstorage:fluid_storage.3.name=512k Fluid Storage Block block.refinedstorage:fluid_storage.4.name=Creative Fluid Storage Block +block.refinedstorage:reader.name=Reader item.refinedstorage:storage_disk.0.name=1k Storage Disk item.refinedstorage:storage_disk.1.name=4k Storage Disk diff --git a/src/main/resources/assets/refinedstorage/textures/gui/readerwriter.png b/src/main/resources/assets/refinedstorage/textures/gui/readerwriter.png new file mode 100755 index 000000000..95897a88b Binary files /dev/null and b/src/main/resources/assets/refinedstorage/textures/gui/readerwriter.png differ