From 7a74fb86ba26c13343658a411b363a3aea5a2054 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Tue, 19 Nov 2013 18:16:26 -0500 Subject: [PATCH] More work! --- common/mekanism/client/ClientProxy.java | 3 +- .../mekanism/client/gui/GuiDigitalMiner.java | 138 +++++++++++++++--- .../client/gui/GuiMItemStackFilter.java | 14 +- .../client/gui/GuiMOreDictFilter.java | 10 +- common/mekanism/common/CommonProxy.java | 3 +- .../mekanism/common/block/BlockMachine.java | 10 +- .../container/ContainerDigitalMiner.java | 3 +- .../common/network/PacketDigitalMinerGui.java | 11 ++ .../tileentity/TileEntityDigitalMiner.java | 23 +-- .../assets/mekanism/gui/GuiDigitalMiner.png | Bin 5231 -> 5237 bytes 10 files changed, 166 insertions(+), 49 deletions(-) diff --git a/common/mekanism/client/ClientProxy.java b/common/mekanism/client/ClientProxy.java index e230ee2c8..1a6c0dcd4 100644 --- a/common/mekanism/client/ClientProxy.java +++ b/common/mekanism/client/ClientProxy.java @@ -10,6 +10,7 @@ import mekanism.client.gui.GuiCombiner; import mekanism.client.gui.GuiConfiguration; import mekanism.client.gui.GuiCredits; import mekanism.client.gui.GuiCrusher; +import mekanism.client.gui.GuiDigitalMiner; import mekanism.client.gui.GuiDynamicTank; import mekanism.client.gui.GuiElectricChest; import mekanism.client.gui.GuiElectricPump; @@ -300,7 +301,7 @@ public class ClientProxy extends CommonProxy case 1: return new GuiCredits(); case 2: - //DigitalMiner GUI TODO + return new GuiDigitalMiner(player.inventory, (TileEntityDigitalMiner)tileEntity); case 3: return new GuiEnrichmentChamber(player.inventory, (TileEntityElectricMachine)tileEntity); case 4: diff --git a/common/mekanism/client/gui/GuiDigitalMiner.java b/common/mekanism/client/gui/GuiDigitalMiner.java index 4c568e644..484e621d5 100644 --- a/common/mekanism/client/gui/GuiDigitalMiner.java +++ b/common/mekanism/client/gui/GuiDigitalMiner.java @@ -1,11 +1,21 @@ package mekanism.client.gui; +import java.util.ArrayList; + +import mekanism.api.Object3D; +import mekanism.common.PacketHandler; +import mekanism.common.PacketHandler.Transmission; import mekanism.common.inventory.container.ContainerDigitalMiner; +import mekanism.common.network.PacketDigitalMinerGui; +import mekanism.common.network.PacketDigitalMinerGui.MinerGuiPacket; +import mekanism.common.network.PacketTileEntity; import mekanism.common.tileentity.TileEntityDigitalMiner; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import universalelectricity.core.electricity.ElectricityDisplay; @@ -37,30 +47,114 @@ public class GuiDigitalMiner extends GuiMekanism fontRenderer.drawString(tileEntity.fullName, 45, 6, 0x404040); fontRenderer.drawString("Inventory", 8, (ySize - 96) + 2, 0x404040); + + if(tileEntity.replaceStack != null) + { + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_LIGHTING); + itemRenderer.renderItemAndEffectIntoGUI(fontRenderer, mc.getTextureManager(), tileEntity.replaceStack, 144, 27); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glPopMatrix(); + } - if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69) - { - drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(tileEntity.getEnergyStored(), ElectricUnit.JOULES), xAxis, yAxis); + if(xAxis >= 164 && xAxis <= 168 && yAxis >= 25 && yAxis <= 77) + { + drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(tileEntity.getEnergyStored(), ElectricUnit.JOULES), xAxis, yAxis); + } + + if(xAxis >= 147 && xAxis <= 161 && yAxis >= 47 && yAxis <= 61) + { + drawCreativeTabHoveringText("Auto-eject", xAxis, yAxis); + } + + if(xAxis >= 147 && xAxis <= 161 && yAxis >= 63 && yAxis <= 77) + { + drawCreativeTabHoveringText("Auto-pull", xAxis, yAxis); + } } -} - -@Override -protected void drawGuiContainerBackgroundLayer(float partialTick, int mouseX, int mouseY) -{ - super.drawGuiContainerBackgroundLayer(partialTick, mouseX, mouseY); - mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiDigitalMiner.png")); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - int guiWidth = (width - xSize) / 2; - int guiHeight = (height - ySize) / 2; - drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize); - - int xAxis = mouseX - guiWidth; - int yAxis = mouseY - guiHeight; + @Override + protected void drawGuiContainerBackgroundLayer(float partialTick, int mouseX, int mouseY) + { + super.drawGuiContainerBackgroundLayer(partialTick, mouseX, mouseY); + + mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiDigitalMiner.png")); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + int guiWidth = (width - xSize) / 2; + int guiHeight = (height - ySize) / 2; + drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize); + + int xAxis = mouseX - guiWidth; + int yAxis = mouseY - guiHeight; + + int displayInt; + + displayInt = tileEntity.getScaledEnergyLevel(52); + drawTexturedModalRect(guiWidth + 164, guiHeight + 25 + 52 - displayInt, 176, 52 - displayInt, 4, displayInt); + + if(xAxis >= 147 && xAxis <= 161 && yAxis >= 47 && yAxis <= 61) + { + drawTexturedModalRect(guiWidth + 147, guiHeight + 47, 176 + 4, 0, 14, 14); + } + else { + drawTexturedModalRect(guiWidth + 147, guiHeight + 47, 176 + 4, 14, 14, 14); + } + + if(xAxis >= 147 && xAxis <= 161 && yAxis >= 63 && yAxis <= 77) + { + drawTexturedModalRect(guiWidth + 147, guiHeight + 63, 176 + 4 + 14, 0, 14, 14); + } + else { + drawTexturedModalRect(guiWidth + 147, guiHeight + 63, 176 + 4 + 14, 14, 14, 14); + } + } - int displayInt; - - displayInt = tileEntity.getScaledEnergyLevel(52); - drawTexturedModalRect(guiWidth + 165, guiHeight + 17 + 52 - displayInt, 176, 7 + 52 - displayInt, 4, displayInt); -} + @Override + protected void mouseClicked(int mouseX, int mouseY, int button) + { + super.mouseClicked(mouseX, mouseY, button); + + if(button == 0) + { + int xAxis = (mouseX - (width - xSize) / 2); + int yAxis = (mouseY - (height - ySize) / 2); + + if(xAxis >= 147 && xAxis <= 161 && yAxis >= 47 && yAxis <= 61) + { + mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F); + + ArrayList data = new ArrayList(); + data.add(0); + + PacketHandler.sendPacket(Transmission.SERVER, new PacketTileEntity().setParams(Object3D.get(tileEntity), data)); + } + + if(xAxis >= 147 && xAxis <= 161 && yAxis >= 63 && yAxis <= 77) + { + mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F); + + ArrayList data = new ArrayList(); + data.add(1); + + PacketHandler.sendPacket(Transmission.SERVER, new PacketTileEntity().setParams(Object3D.get(tileEntity), data)); + } + + if(xAxis >= 12 && xAxis <= 28 && yAxis >= 19 && yAxis <= 35) + { + ItemStack stack = mc.thePlayer.inventory.getItemStack(); + + if(stack != null && !Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) + { + tileEntity.replaceStack = stack.copy(); + tileEntity.replaceStack.stackSize = 1; + } + else if(stack == null && Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) + { + tileEntity.replaceStack = null; + } + + mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F); + } + } + } } diff --git a/common/mekanism/client/gui/GuiMItemStackFilter.java b/common/mekanism/client/gui/GuiMItemStackFilter.java index e60c85743..6e4858b3f 100644 --- a/common/mekanism/client/gui/GuiMItemStackFilter.java +++ b/common/mekanism/client/gui/GuiMItemStackFilter.java @@ -2,27 +2,23 @@ package mekanism.client.gui; import mekanism.api.EnumColor; import mekanism.api.Object3D; -import mekanism.client.render.MekanismRenderer; import mekanism.common.PacketHandler; import mekanism.common.PacketHandler.Transmission; import mekanism.common.inventory.container.ContainerFilter; import mekanism.common.miner.MItemStackFilter; +import mekanism.common.network.PacketDigitalMinerGui; +import mekanism.common.network.PacketDigitalMinerGui.MinerGuiPacket; import mekanism.common.network.PacketEditFilter; -import mekanism.common.network.PacketLogisticalSorterGui; -import mekanism.common.network.PacketLogisticalSorterGui.SorterGuiPacket; import mekanism.common.network.PacketNewFilter; import mekanism.common.tileentity.TileEntityDigitalMiner; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; -import mekanism.common.util.TransporterUtils; import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiTextField; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL12; public class GuiMItemStackFilter extends GuiMekanism { @@ -90,7 +86,7 @@ public class GuiMItemStackFilter extends GuiMekanism PacketHandler.sendPacket(Transmission.SERVER, new PacketEditFilter().setParams(Object3D.get(tileEntity), false, origFilter, filter)); } - PacketHandler.sendPacket(Transmission.SERVER, new PacketLogisticalSorterGui().setParams(SorterGuiPacket.SERVER, Object3D.get(tileEntity), 0)); + PacketHandler.sendPacket(Transmission.SERVER, new PacketDigitalMinerGui().setParams(MinerGuiPacket.SERVER, Object3D.get(tileEntity), 0)); } else if(filter.itemType == null) { @@ -101,7 +97,7 @@ public class GuiMItemStackFilter extends GuiMekanism else if(guibutton.id == 1) { PacketHandler.sendPacket(Transmission.SERVER, new PacketEditFilter().setParams(Object3D.get(tileEntity), true, origFilter)); - PacketHandler.sendPacket(Transmission.SERVER, new PacketLogisticalSorterGui().setParams(SorterGuiPacket.SERVER, Object3D.get(tileEntity), 0)); + PacketHandler.sendPacket(Transmission.SERVER, new PacketDigitalMinerGui().setParams(MinerGuiPacket.SERVER, Object3D.get(tileEntity), 0)); } } @@ -205,7 +201,7 @@ public class GuiMItemStackFilter extends GuiMekanism if(xAxis >= 5 && xAxis <= 16 && yAxis >= 5 && yAxis <= 16) { mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F); - PacketHandler.sendPacket(Transmission.SERVER, new PacketLogisticalSorterGui().setParams(SorterGuiPacket.SERVER, Object3D.get(tileEntity), 0)); + PacketHandler.sendPacket(Transmission.SERVER, new PacketDigitalMinerGui().setParams(MinerGuiPacket.SERVER, Object3D.get(tileEntity), 0)); } if(xAxis >= 12 && xAxis <= 28 && yAxis >= 19 && yAxis <= 35) diff --git a/common/mekanism/client/gui/GuiMOreDictFilter.java b/common/mekanism/client/gui/GuiMOreDictFilter.java index ab03e41f7..7569c89c5 100644 --- a/common/mekanism/client/gui/GuiMOreDictFilter.java +++ b/common/mekanism/client/gui/GuiMOreDictFilter.java @@ -9,9 +9,9 @@ import mekanism.common.PacketHandler; import mekanism.common.PacketHandler.Transmission; import mekanism.common.inventory.container.ContainerFilter; import mekanism.common.miner.MOreDictFilter; +import mekanism.common.network.PacketDigitalMinerGui; +import mekanism.common.network.PacketDigitalMinerGui.MinerGuiPacket; import mekanism.common.network.PacketEditFilter; -import mekanism.common.network.PacketLogisticalSorterGui; -import mekanism.common.network.PacketLogisticalSorterGui.SorterGuiPacket; import mekanism.common.network.PacketNewFilter; import mekanism.common.tileentity.TileEntityDigitalMiner; import mekanism.common.util.MekanismUtils; @@ -132,7 +132,7 @@ public class GuiMOreDictFilter extends GuiMekanism PacketHandler.sendPacket(Transmission.SERVER, new PacketEditFilter().setParams(Object3D.get(tileEntity), false, origFilter, filter)); } - PacketHandler.sendPacket(Transmission.SERVER, new PacketLogisticalSorterGui().setParams(SorterGuiPacket.SERVER, Object3D.get(tileEntity), 0)); + PacketHandler.sendPacket(Transmission.SERVER, new PacketDigitalMinerGui().setParams(MinerGuiPacket.SERVER, Object3D.get(tileEntity), 0)); } else { status = EnumColor.DARK_RED + "No key"; @@ -142,7 +142,7 @@ public class GuiMOreDictFilter extends GuiMekanism else if(guibutton.id == 1) { PacketHandler.sendPacket(Transmission.SERVER, new PacketEditFilter().setParams(Object3D.get(tileEntity), true, origFilter)); - PacketHandler.sendPacket(Transmission.SERVER, new PacketLogisticalSorterGui().setParams(SorterGuiPacket.SERVER, Object3D.get(tileEntity), 0)); + PacketHandler.sendPacket(Transmission.SERVER, new PacketDigitalMinerGui().setParams(MinerGuiPacket.SERVER, Object3D.get(tileEntity), 0)); } } @@ -257,7 +257,7 @@ public class GuiMOreDictFilter extends GuiMekanism if(xAxis >= 5 && xAxis <= 16 && yAxis >= 5 && yAxis <= 16) { mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F); - PacketHandler.sendPacket(Transmission.SERVER, new PacketLogisticalSorterGui().setParams(SorterGuiPacket.SERVER, Object3D.get(tileEntity), 0)); + PacketHandler.sendPacket(Transmission.SERVER, new PacketDigitalMinerGui().setParams(MinerGuiPacket.SERVER, Object3D.get(tileEntity), 0)); } if(xAxis >= 131 && xAxis <= 143 && yAxis >= 47 && yAxis <= 59) diff --git a/common/mekanism/common/CommonProxy.java b/common/mekanism/common/CommonProxy.java index 31e2379f3..03cd397cd 100644 --- a/common/mekanism/common/CommonProxy.java +++ b/common/mekanism/common/CommonProxy.java @@ -3,6 +3,7 @@ package mekanism.common; import java.io.File; import mekanism.common.inventory.container.ContainerAdvancedElectricMachine; +import mekanism.common.inventory.container.ContainerDigitalMiner; import mekanism.common.inventory.container.ContainerDynamicTank; import mekanism.common.inventory.container.ContainerElectricMachine; import mekanism.common.inventory.container.ContainerElectricPump; @@ -244,7 +245,7 @@ public class CommonProxy switch(ID) { case 2: - //DIGITAL MINER CONTAINER TODO + return new ContainerDigitalMiner(player.inventory, (TileEntityDigitalMiner)tileEntity); case 3: return new ContainerElectricMachine(player.inventory, (TileEntityElectricMachine)tileEntity); case 4: diff --git a/common/mekanism/common/block/BlockMachine.java b/common/mekanism/common/block/BlockMachine.java index 27e3f1df5..c8bcde116 100644 --- a/common/mekanism/common/block/BlockMachine.java +++ b/common/mekanism/common/block/BlockMachine.java @@ -362,6 +362,10 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds { return icons[blockID][11][0]; } + else if(meta == 4) + { + return icons[blockID][0][2]; //TODO + } } return null; @@ -480,6 +484,10 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds { return icons[blockID][11][0]; } + else if(metadata == 4) + { + return icons[blockID][0][2]; //TODO + } return null; } @@ -498,7 +506,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds list.add(new ItemStack(i, 1, 1)); list.add(new ItemStack(i, 1, 2)); list.add(new ItemStack(i, 1, 3)); - //TODO DIGITAL MINER + list.add(new ItemStack(i, 1, 4)); for(RecipeType type : RecipeType.values()) { diff --git a/common/mekanism/common/inventory/container/ContainerDigitalMiner.java b/common/mekanism/common/inventory/container/ContainerDigitalMiner.java index 4c3336d17..12cba0c32 100644 --- a/common/mekanism/common/inventory/container/ContainerDigitalMiner.java +++ b/common/mekanism/common/inventory/container/ContainerDigitalMiner.java @@ -27,7 +27,7 @@ public class ContainerDigitalMiner extends Container } } - addSlotToContainer(new SlotDischarge(tentity, 27, 180, 11)); + addSlotToContainer(new SlotDischarge(tentity, 27, 152, 6)); int slotX; @@ -53,6 +53,7 @@ public class ContainerDigitalMiner extends Container { super.onContainerClosed(entityplayer); + tileEntity.closeChest(); tileEntity.playersUsing.remove(entityplayer); } diff --git a/common/mekanism/common/network/PacketDigitalMinerGui.java b/common/mekanism/common/network/PacketDigitalMinerGui.java index a9b73c072..77de26100 100644 --- a/common/mekanism/common/network/PacketDigitalMinerGui.java +++ b/common/mekanism/common/network/PacketDigitalMinerGui.java @@ -1,6 +1,7 @@ package mekanism.common.network; import java.io.DataOutputStream; +import java.util.ArrayList; import mekanism.api.Object3D; import mekanism.client.gui.GuiDigitalMiner; @@ -145,6 +146,16 @@ public class PacketDigitalMinerGui implements IMekanismPacket playerMP.openContainer = container; playerMP.openContainer.windowId = window; playerMP.openContainer.addCraftingToCrafters(playerMP); + + if(guiType == 0) + { + TileEntityDigitalMiner tile = (TileEntityDigitalMiner)obj.getTileEntity(world); + + for(EntityPlayer player : tile.playersUsing) + { + PacketHandler.sendPacket(Transmission.SINGLE_CLIENT, new PacketTileEntity().setParams(obj, tile.getFilterPacket(new ArrayList())), player); + } + } } @SideOnly(Side.CLIENT) diff --git a/common/mekanism/common/tileentity/TileEntityDigitalMiner.java b/common/mekanism/common/tileentity/TileEntityDigitalMiner.java index d0458fc62..3b7b9249f 100644 --- a/common/mekanism/common/tileentity/TileEntityDigitalMiner.java +++ b/common/mekanism/common/tileentity/TileEntityDigitalMiner.java @@ -183,6 +183,20 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I @Override public void handlePacketData(ByteArrayDataInput dataStream) { + if(!worldObj.isRemote) + { + int type = dataStream.readInt(); + + if(type == 0) + { + doEject = !doEject; + } + else if(type == 1) + { + doPull = !doPull; + } + } + super.handlePacketData(dataStream); int type = dataStream.readInt(); @@ -249,15 +263,6 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I return data; } - @Override - public void openChest() - { - if(!worldObj.isRemote) - { - PacketHandler.sendPacket(Transmission.CLIENTS_RANGE, new PacketTileEntity().setParams(Object3D.get(this), getFilterPacket(new ArrayList())), Object3D.get(this), 50D); - } - } - public ArrayList getGenericPacket(ArrayList data) { super.getNetworkedData(data); diff --git a/resources/assets/mekanism/gui/GuiDigitalMiner.png b/resources/assets/mekanism/gui/GuiDigitalMiner.png index 943558d24fb62490450454473237aa6bc9c84851..6f160d51874c6b146a106a18f85f7e5ec8fb585d 100644 GIT binary patch delta 4169 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 Zrm$XZwW=+47m6Y9GdHz9T4YQK{|^*4?acrH delta 4163 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 tTk0@HSHhGGfEfJ$?04!bMh~F&d2QZGCcjX=