From 5e5975bc58ad5e41f232342ffcbecf5cca685c84 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Wed, 11 Mar 2015 10:58:15 -0500 Subject: [PATCH] Work on new teleporter system - still a lot to do --- .../mekanism/client/gui/GuiDigitalMiner.java | 1 - .../client/gui/GuiRotaryCondensentrator.java | 2 +- .../mekanism/client/gui/GuiTeleporter.java | 330 +++++++++++------- .../client/gui/element/GuiElement.java | 24 ++ .../client/gui/element/GuiScrollList.java | 66 +++- src/main/java/mekanism/common/Mekanism.java | 5 + .../mekanism/common/block/BlockMachine.java | 30 +- .../mekanism/common/block/BlockPlastic.java | 7 +- .../mekanism/common/frequency/Frequency.java | 10 + .../common/frequency/FrequencyManager.java | 10 + .../container/ContainerTeleporter.java | 14 +- .../common/tile/TileEntityTeleporter.java | 88 +++-- .../mekanism/common/util/MekanismUtils.java | 7 + .../assets/mekanism/gui/GuiTeleporter.png | Bin 2557 -> 5923 bytes .../mekanism/gui/elements/GuiScrollList.png | Bin 2375 -> 2429 bytes .../resources/assets/mekanism/lang/en_US.lang | 10 + 16 files changed, 442 insertions(+), 162 deletions(-) diff --git a/src/main/java/mekanism/client/gui/GuiDigitalMiner.java b/src/main/java/mekanism/client/gui/GuiDigitalMiner.java index 3dc0960e0..f11b496c6 100644 --- a/src/main/java/mekanism/client/gui/GuiDigitalMiner.java +++ b/src/main/java/mekanism/client/gui/GuiDigitalMiner.java @@ -63,7 +63,6 @@ public class GuiDigitalMiner extends GuiMekanism guiElements.add(new GuiSlot(SlotType.NORMAL, this, MekanismUtils.getResource(ResourceType.GUI, "GuiDigitalMiner.png"), 151, 5).with(SlotOverlay.POWER)); guiElements.add(new GuiSlot(SlotType.NORMAL, this, MekanismUtils.getResource(ResourceType.GUI, "GuiDigitalMiner.png"), 143, 26)); - ySize+=64; } diff --git a/src/main/java/mekanism/client/gui/GuiRotaryCondensentrator.java b/src/main/java/mekanism/client/gui/GuiRotaryCondensentrator.java index 70baf84fa..38c25ed80 100644 --- a/src/main/java/mekanism/client/gui/GuiRotaryCondensentrator.java +++ b/src/main/java/mekanism/client/gui/GuiRotaryCondensentrator.java @@ -114,7 +114,7 @@ public class GuiRotaryCondensentrator extends GuiMekanism int xAxis = (mouseX - (width - xSize) / 2); int yAxis = (mouseY - (height - ySize) / 2); - fontRendererObj.drawString(tileEntity.getInventoryName(), 26, 4, 0x404040); + fontRendererObj.drawString(tileEntity.getInventoryName(), (xSize/2)-(fontRendererObj.getStringWidth(tileEntity.getInventoryName())/2), 4, 0x404040); fontRendererObj.drawString(tileEntity.mode == 0 ? MekanismUtils.localize("gui.condensentrating") : MekanismUtils.localize("gui.decondensentrating"), 6, (ySize - 94) + 2, 0x404040); if(xAxis >= 116 && xAxis <= 168 && yAxis >= 76 && yAxis <= 80) diff --git a/src/main/java/mekanism/client/gui/GuiTeleporter.java b/src/main/java/mekanism/client/gui/GuiTeleporter.java index b440659f3..94cd971e0 100644 --- a/src/main/java/mekanism/client/gui/GuiTeleporter.java +++ b/src/main/java/mekanism/client/gui/GuiTeleporter.java @@ -1,37 +1,200 @@ package mekanism.client.gui; -import java.util.ArrayList; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import mekanism.api.Coord4D; +import mekanism.api.EnumColor; import mekanism.client.gui.element.GuiPowerBar; +import mekanism.client.gui.element.GuiScrollList; import mekanism.client.gui.element.GuiSlot; import mekanism.client.gui.element.GuiSlot.SlotOverlay; import mekanism.client.gui.element.GuiSlot.SlotType; import mekanism.client.sound.SoundHandler; -import mekanism.common.Mekanism; import mekanism.common.inventory.container.ContainerTeleporter; -import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.tile.TileEntityTeleporter; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiTextField; import net.minecraft.entity.player.InventoryPlayer; +import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + @SideOnly(Side.CLIENT) public class GuiTeleporter extends GuiMekanism { + public static int MAX_LENGTH = 16; + public TileEntityTeleporter tileEntity; + + public GuiButton publicButton; + public GuiButton privateButton; + + public GuiButton setButton; + public GuiButton deleteButton; + + public GuiScrollList scrollList; + + public GuiTextField frequencyField; + + public boolean privateMode; public GuiTeleporter(InventoryPlayer inventory, TileEntityTeleporter tentity) { super(tentity, new ContainerTeleporter(inventory, tentity)); tileEntity = tentity; - guiElements.add(new GuiPowerBar(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiTeleporter.png"), 164, 15)); - guiElements.add(new GuiSlot(SlotType.NORMAL, this, MekanismUtils.getResource(ResourceType.GUI, "GuiTeleporter.png"), 26, 13).with(SlotOverlay.POWER)); + guiElements.add(new GuiPowerBar(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiTeleporter.png"), 158, 26)); + guiElements.add(new GuiSlot(SlotType.NORMAL, this, MekanismUtils.getResource(ResourceType.GUI, "GuiTeleporter.png"), 152, 6).with(SlotOverlay.POWER)); + guiElements.add(scrollList = new GuiScrollList(this, MekanismUtils.getResource(ResourceType.GUI, "GuiTeleporter.png"), 28, 37, 120, 4)); + + ySize+=64; + } + + @Override + public void initGui() + { + super.initGui(); + + int guiWidth = (width - xSize) / 2; + int guiHeight = (height - ySize) / 2; + + buttonList.clear(); + + publicButton = new GuiButton(0, guiWidth + 27, guiHeight + 14, 60, 20, MekanismUtils.localize("gui.public")); + privateButton = new GuiButton(1, guiWidth + 89, guiHeight + 14, 60, 20, MekanismUtils.localize("gui.private")); + + setButton = new GuiButton(2, guiWidth + 27, guiHeight + 116, 60, 20, MekanismUtils.localize("gui.set")); + deleteButton = new GuiButton(3, guiWidth + 89, guiHeight + 116, 60, 20, MekanismUtils.localize("gui.delete")); + + frequencyField = new GuiTextField(fontRendererObj, guiWidth + 50, guiHeight + 104, 86, 11); + frequencyField.setMaxStringLength(MAX_LENGTH); + frequencyField.setEnableBackgroundDrawing(false); + + updateButtons(); + + buttonList.add(publicButton); + buttonList.add(privateButton); + buttonList.add(setButton); + buttonList.add(deleteButton); + } + + public void setFrequency() + { + String text = frequencyField.getText(); + + if(text.isEmpty()) + { + return; + } + } + + public String getSecurity() + { + return privateMode ? EnumColor.DARK_RED + MekanismUtils.localize("gui.private") : MekanismUtils.localize("gui.public"); + } + + public void updateButtons() + { + if(privateMode) + { + publicButton.enabled = true; + privateButton.enabled = false; + } + else { + publicButton.enabled = false; + privateButton.enabled = true; + } + + if(scrollList.hasSelection()) + { + setButton.enabled = true; + deleteButton.enabled = true; + } + else { + setButton.enabled = false; + deleteButton.enabled = false; + } + } + + @Override + public void updateScreen() + { + super.updateScreen(); + + frequencyField.updateCursorCounter(); + } + + @Override + public void mouseClicked(int mouseX, int mouseY, int button) + { + super.mouseClicked(mouseX, mouseY, button); + + updateButtons(); + + frequencyField.mouseClicked(mouseX, mouseY, button); + + if(button == 0) + { + int xAxis = (mouseX - (width - xSize) / 2); + int yAxis = (mouseY - (height - ySize) / 2); + + if(xAxis >= 137 && xAxis <= 148 && yAxis >= 103 && yAxis <= 114) + { + setFrequency(); + SoundHandler.playSound("gui.button.press"); + } + } + } + + @Override + public void keyTyped(char c, int i) + { + if(!frequencyField.isFocused() || i == Keyboard.KEY_ESCAPE) + { + super.keyTyped(c, i); + } + + if(i == Keyboard.KEY_RETURN) + { + if(frequencyField.isFocused()) + { + setFrequency(); + } + } + + if(Character.isDigit(c) || Character.isLetter(c) || i == Keyboard.KEY_BACK || i == Keyboard.KEY_DELETE || i == Keyboard.KEY_LEFT || i == Keyboard.KEY_RIGHT) + { + frequencyField.textboxKeyTyped(c, i); + } + + updateButtons(); + } + + @Override + protected void actionPerformed(GuiButton guibutton) + { + super.actionPerformed(guibutton); + + if(guibutton.id == 0) + { + privateMode = false; + } + else if(guibutton.id == 1) + { + privateMode = true; + } + else if(guibutton.id == 2) + { + + } + else if(guibutton.id == 2) + { + + } + + updateButtons(); } @Override @@ -40,90 +203,32 @@ public class GuiTeleporter extends GuiMekanism int xAxis = (mouseX-(width-xSize)/2); int yAxis = (mouseY-(height-ySize)/2); - fontRendererObj.drawString(tileEntity.getInventoryName(), 45, 6, 0x404040); - fontRendererObj.drawString(MekanismUtils.localize("container.inventory"), 8, (ySize-96)+2, 0x404040); - fontRendererObj.drawString(tileEntity.getStatusDisplay(), 66, 19, 0x00CD00); - - if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69) + fontRendererObj.drawString(tileEntity.getInventoryName(), (xSize/2)-(fontRendererObj.getStringWidth(tileEntity.getInventoryName())/2), 4, 0x404040); + fontRendererObj.drawString(MekanismUtils.localize("gui.owner") + ": " + tileEntity.owner != null ? tileEntity.owner : MekanismUtils.localize("gui.none"), 8, (ySize-96)+4, 0x404040); + + fontRendererObj.drawString(MekanismUtils.localize("gui.freq") + ":", 32, 81, 0x404040); + fontRendererObj.drawString(MekanismUtils.localize("gui.security") + ":", 32, 91, 0x404040); + + fontRendererObj.drawString(" " + (tileEntity.frequency != null ? tileEntity.frequency.name : EnumColor.DARK_RED + MekanismUtils.localize("gui.none")), 32 + fontRendererObj.getStringWidth(MekanismUtils.localize("gui.freq") + ":"), 81, 0x797979); + fontRendererObj.drawString(" " + getSecurity(), 32 + fontRendererObj.getStringWidth(MekanismUtils.localize("gui.security") + ":"), 91, 0x797979); + + String str = MekanismUtils.localize("gui.set") + ":"; + renderScaledText(str, 27, 104, 0x404040, 20); + + if(xAxis >= 6 && xAxis <= 24 && yAxis >= 6 && yAxis <= 24) { - drawCreativeTabHoveringText(MekanismUtils.getEnergyDisplay(tileEntity.getEnergy()), xAxis, yAxis); + if(tileEntity.frequency == null) + { + drawCreativeTabHoveringText(EnumColor.DARK_RED + MekanismUtils.localize("gui.teleporter.noFreq"), xAxis, yAxis); + } + else { + drawCreativeTabHoveringText(tileEntity.getStatusDisplay(), xAxis, yAxis); + } } super.drawGuiContainerForegroundLayer(mouseX, mouseY); } - @Override - protected void mouseClicked(int x, int y, int button) - { - super.mouseClicked(x, y, button); - - int xAxis = (x-(width-xSize)/2); - int yAxis = (y-(height-ySize)/2); - - handleButtonClick(xAxis, yAxis, button, 23, 37, 44, 58, 0); - handleButtonClick(xAxis, yAxis, button, 62, 76, 44, 58, 1); - handleButtonClick(xAxis, yAxis, button, 101, 115, 44, 58, 2); - handleButtonClick(xAxis, yAxis, button, 140, 154, 44, 58, 3); - } - - private void handleButtonClick(int xAxis, int yAxis, int mouseButton, int xmin, int xmax, int ymin, int ymax, int buttonIndex) - { - if(xAxis > xmin && xAxis < xmax && yAxis > ymin && yAxis < ymax) - { - ArrayList data = new ArrayList(); - - int incrementedNumber = getUpdatedNumber(getButtonValue(buttonIndex), mouseButton); - - data.add(buttonIndex); - data.add(incrementedNumber); - - Mekanism.packetHandler.sendToServer(new TileEntityMessage(Coord4D.get(tileEntity), data)); - setButton(buttonIndex, incrementedNumber); - SoundHandler.playSound("gui.button.press"); - } - } - - public void setButton(int index, int number) - { - if(index == 0) - { - tileEntity.code.digitOne = number; - } - if(index == 1) - { - tileEntity.code.digitTwo = number; - } - if(index == 2) - { - tileEntity.code.digitThree = number; - } - if(index == 3) - { - tileEntity.code.digitFour = number; - } - } - - public int getButtonValue(int index) - { - if(index == 0) - { - return tileEntity.code.digitOne; - } - if(index == 1) - { - return tileEntity.code.digitTwo; - } - if(index == 2) - { - return tileEntity.code.digitThree; - } - if(index == 3) - { - return tileEntity.code.digitFour; - } - return 0;//should never happen - } - @Override protected void drawGuiContainerBackgroundLayer(float partialTick, int mouseX, int mouseY) { @@ -132,40 +237,25 @@ public class GuiTeleporter extends GuiMekanism int guiWidth = (width-xSize)/2; int guiHeight = (height-ySize)/2; drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize); - int displayInt; - - displayInt = tileEntity.getScaledEnergyLevel(52); - drawTexturedModalRect(guiWidth+165, guiHeight+17+52-displayInt, 176+13, 52-displayInt, 4, displayInt); - - displayInt = getYAxisForNumber(tileEntity.code.digitOne); - drawTexturedModalRect(guiWidth+23, guiHeight+44, 176, displayInt, 13, 13); - - displayInt = getYAxisForNumber(tileEntity.code.digitTwo); - drawTexturedModalRect(guiWidth+62, guiHeight+44, 176, displayInt, 13, 13); - - displayInt = getYAxisForNumber(tileEntity.code.digitThree); - drawTexturedModalRect(guiWidth+101, guiHeight+44, 176, displayInt, 13, 13); - - displayInt = getYAxisForNumber(tileEntity.code.digitFour); - drawTexturedModalRect(guiWidth+140, guiHeight+44, 176, displayInt, 13, 13); + + int xAxis = (mouseX - (width - xSize) / 2); + int yAxis = (mouseY - (height - ySize) / 2); + + if(xAxis >= 137 && xAxis <= 148 && yAxis >= 103 && yAxis <= 114) + { + drawTexturedModalRect(guiWidth + 137, guiHeight + 103, xSize, 0, 11, 11); + } + else { + drawTexturedModalRect(guiWidth + 137, guiHeight + 103, xSize, 11, 11, 11); + } + + int y = tileEntity.frequency == null ? 94 : (tileEntity.status == 2 ? 22 : (tileEntity.status == 3 ? 40 : + (tileEntity.status == 4 ? 58 : 76))); + + drawTexturedModalRect(guiWidth + 6, guiHeight + 6, 176, y, 18, 18); super.drawGuiContainerBackgroundLayer(partialTick, mouseX, mouseY); - } - - public int getUpdatedNumber(int i, int mouseButton) - { - if(mouseButton == 1) //right click - { - return (i-1+10)%10; //add 10 to ensure postive result - } - else - { - return (i+1)%10; - } - } - - public int getYAxisForNumber(int i) - { - return i*13; + + frequencyField.drawTextBox(); } } diff --git a/src/main/java/mekanism/client/gui/element/GuiElement.java b/src/main/java/mekanism/client/gui/element/GuiElement.java index 3ede9eeb8..712c425e3 100644 --- a/src/main/java/mekanism/client/gui/element/GuiElement.java +++ b/src/main/java/mekanism/client/gui/element/GuiElement.java @@ -2,6 +2,8 @@ package mekanism.client.gui.element; import java.util.List; +import org.lwjgl.opengl.GL11; + import mekanism.client.gui.IGuiWrapper; import mekanism.common.ObfuscatedNames; import mekanism.common.util.MekanismUtils; @@ -93,6 +95,28 @@ public abstract class GuiElement } } } + + public void renderScaledText(String text, int x, int y, int color, int maxX) + { + int length = getFontRenderer().getStringWidth(text); + + if(length <= maxX) + { + getFontRenderer().drawString(text, x, y, color); + } + else { + float scale = (float)maxX/length; + float reverse = 1/scale; + float yAdd = 4-(scale*8)/2F; + + GL11.glPushMatrix(); + + GL11.glScalef(scale, scale, scale); + getFontRenderer().drawString(text, (int)(x*reverse), (int)((y*reverse)+yAdd), color); + + GL11.glPopMatrix(); + } + } public FontRenderer getFontRenderer() { diff --git a/src/main/java/mekanism/client/gui/element/GuiScrollList.java b/src/main/java/mekanism/client/gui/element/GuiScrollList.java index b67a1e3ce..1bb7544f4 100644 --- a/src/main/java/mekanism/client/gui/element/GuiScrollList.java +++ b/src/main/java/mekanism/client/gui/element/GuiScrollList.java @@ -7,12 +7,12 @@ import mekanism.client.gui.IGuiWrapper; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; import net.minecraft.util.ResourceLocation; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import org.lwjgl.opengl.GL11; import codechicken.lib.vec.Rectangle4i; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class GuiScrollList extends GuiElement @@ -27,6 +27,8 @@ public class GuiScrollList extends GuiElement public int dragOffset = 0; + public int selected = -1; + public float scroll; public boolean isDragging; @@ -42,6 +44,16 @@ public class GuiScrollList extends GuiElement size = sizeY; } + public boolean hasSelection() + { + return selected != -1; + } + + public int getSelection() + { + return selected; + } + public void setText(List text) { scroll = 0; @@ -52,6 +64,11 @@ public class GuiScrollList extends GuiElement return; } + if(selected > text.size()-1) + { + selected = -1; + } + textEntries = text; } @@ -67,6 +84,7 @@ public class GuiScrollList extends GuiElement mc.renderEngine.bindTexture(RESOURCE); drawBlack(guiWidth, guiHeight); + drawSelected(guiWidth, guiHeight, selected); mc.renderEngine.bindTexture(defaultLocation); } @@ -85,6 +103,22 @@ public class GuiScrollList extends GuiElement } } + public void drawSelected(int guiWidth, int guiHeight, int index) + { + int scroll = getScrollIndex(); + + if(selected != -1 && index >= scroll && index <= scroll+size-1) + { + int xDisplays = xSize/10 + (xSize%10 > 0 ? 1 : 0); + + for(int xIter = 0; xIter < xDisplays; xIter++) + { + int width = (xSize%10 > 0 && xIter == xDisplays ? xSize%10 : 10); + guiObj.drawTexturedRect(guiWidth + xPosition + (xIter*10), guiHeight + yPosition + (index-scroll)*10, 0, 10, width, 10); + } + } + } + public void drawScroll() { GL11.glColor4f(1, 1, 1, 1); @@ -134,7 +168,7 @@ public class GuiScrollList extends GuiElement if(index <= textEntries.size()-1) { - guiObj.getFont().drawString(textEntries.get(index), xPosition + 1, yPosition + 1 + (10*i), 0x00CD00); + renderScaledText(textEntries.get(index), xPosition + 1, yPosition + 1 + (10*i), 0x00CD00, xSize-6); } } } @@ -164,6 +198,23 @@ public class GuiScrollList extends GuiElement isDragging = true; } } + else if(xAxis >= xPosition && xAxis <= xPosition + xSize-6 && yAxis >= yPosition && yAxis <= yPosition+size*10) + { + int index = getScrollIndex(); + selected = -1; + + for(int i = 0; i < size; i++) + { + if(index+i <= textEntries.size()-1) + { + if(yAxis >= (yPosition + i*10) && yAxis <= (yPosition + i*10 + 10)) + { + selected = index+i; + break; + } + } + } + } } } @@ -183,10 +234,13 @@ public class GuiScrollList extends GuiElement { super.mouseMovedOrUp(xAxis, yAxis, type); - if(type == 0 && isDragging) + if(type == 0) { - dragOffset = 0; - isDragging = false; + if(isDragging) + { + dragOffset = 0; + isDragging = false; + } } } } diff --git a/src/main/java/mekanism/common/Mekanism.java b/src/main/java/mekanism/common/Mekanism.java index d33a9f2af..a4b6acc5d 100644 --- a/src/main/java/mekanism/common/Mekanism.java +++ b/src/main/java/mekanism/common/Mekanism.java @@ -52,6 +52,8 @@ import mekanism.common.entity.EntityBalloon; import mekanism.common.entity.EntityFlame; import mekanism.common.entity.EntityObsidianTNT; import mekanism.common.entity.EntityRobit; +import mekanism.common.frequency.Frequency; +import mekanism.common.frequency.FrequencyManager; import mekanism.common.integration.MekanismHooks; import mekanism.common.integration.OreDictManager; import mekanism.common.multiblock.MultiblockManager; @@ -170,6 +172,9 @@ public class Mekanism public static MultiblockManager turbineManager = new MultiblockManager("industrialTurbine", TurbineCache.class); public static MultiblockManager boilerManager = new BoilerManager("thermoelectricBoiler"); + /** FrequencyManagers for various networks */ + public static FrequencyManager teleporterManager = new FrequencyManager(Frequency.class); + /** Mekanism creative tab */ public static CreativeTabMekanism tabMekanism = new CreativeTabMekanism(); diff --git a/src/main/java/mekanism/common/block/BlockMachine.java b/src/main/java/mekanism/common/block/BlockMachine.java index cb96cf69c..f94fa768e 100644 --- a/src/main/java/mekanism/common/block/BlockMachine.java +++ b/src/main/java/mekanism/common/block/BlockMachine.java @@ -7,13 +7,13 @@ import java.util.List; import java.util.Random; import mekanism.api.Coord4D; +import mekanism.api.EnumColor; import mekanism.api.MekanismConfig.client; import mekanism.api.MekanismConfig.general; import mekanism.api.MekanismConfig.machines; import mekanism.api.MekanismConfig.usage; import mekanism.api.energy.IEnergizedItem; import mekanism.api.energy.IStrictEnergyStorage; -import mekanism.api.transmitters.TransmissionType; import mekanism.client.ClientProxy; import mekanism.common.ItemAttacher; import mekanism.common.Mekanism; @@ -23,8 +23,8 @@ import mekanism.common.base.IBoundingBlock; import mekanism.common.base.IElectricChest; import mekanism.common.base.IFactory; import mekanism.common.base.IFactory.RecipeType; -import mekanism.common.base.ISideConfiguration; import mekanism.common.base.IRedstoneControl; +import mekanism.common.base.ISideConfiguration; import mekanism.common.base.ISpecialBounds; import mekanism.common.base.ISustainedData; import mekanism.common.base.ISustainedInventory; @@ -90,6 +90,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.ChatComponentText; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; @@ -271,6 +272,11 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer } } } + else if(tileEntity instanceof TileEntityTeleporter) + { + TileEntityTeleporter teleporter = (TileEntityTeleporter)tileEntity; + teleporter.owner = entityliving.getCommandSenderName(); + } tileEntity.setFacing((short)change); tileEntity.redstone = world.isBlockIndirectlyGettingPowered(x, y, z); @@ -637,6 +643,26 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer case LOGISTICAL_SORTER: LogisticalSorterGuiMessage.openServerGui(SorterGuiPacket.SERVER, 0, world, (EntityPlayerMP)entityplayer, Coord4D.get(tileEntity), -1); return true; + case TELEPORTER: + if(!entityplayer.isSneaking()) + { + TileEntityTeleporter teleporter = (TileEntityTeleporter)tileEntity; + + if(teleporter.owner == null) + { + teleporter.owner = entityplayer.getCommandSenderName(); + } + + if(teleporter.owner.equals(entityplayer.getCommandSenderName()) || MekanismUtils.isOp((EntityPlayerMP)entityplayer)) + { + entityplayer.openGui(Mekanism.instance, type.guiId, world, x, y, z); + } + else { + entityplayer.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + MekanismUtils.localize("gui.teleporter.noAccess"))); + } + + return true; + } default: if(!entityplayer.isSneaking() && type.guiId != -1) { diff --git a/src/main/java/mekanism/common/block/BlockPlastic.java b/src/main/java/mekanism/common/block/BlockPlastic.java index c6ddfdf9a..e1c19dbea 100644 --- a/src/main/java/mekanism/common/block/BlockPlastic.java +++ b/src/main/java/mekanism/common/block/BlockPlastic.java @@ -28,6 +28,7 @@ public class BlockPlastic extends Block setHardness(this == MekanismBlocks.ReinforcedPlasticBlock ? 50F : 5F); setResistance(this == MekanismBlocks.ReinforcedPlasticBlock ? 2000F : 10F); setCreativeTab(Mekanism.tabMekanism); + if(this == MekanismBlocks.SlickPlasticBlock) { slipperiness = 0.98F; @@ -100,7 +101,6 @@ public class BlockPlastic extends Block { EnumColor colour = EnumColor.DYES[meta]; return (int)(colour.getColor(0)*255) << 16 | (int)(colour.getColor(1)*255) << 8 | (int)(colour.getColor(2)*255); - } @Override @@ -114,14 +114,17 @@ public class BlockPlastic extends Block return 0; } + @Override public boolean recolourBlock(World world, int x, int y, int z, ForgeDirection side, int colour) { int meta = world.getBlockMetadata(x, y, z); - if (meta != (15 - colour)) + + if(meta != (15 - colour)) { world.setBlockMetadataWithNotify(x, y, z, 15-colour, 3); return true; } + return false; } diff --git a/src/main/java/mekanism/common/frequency/Frequency.java b/src/main/java/mekanism/common/frequency/Frequency.java index b56017bcf..57e9d7e37 100644 --- a/src/main/java/mekanism/common/frequency/Frequency.java +++ b/src/main/java/mekanism/common/frequency/Frequency.java @@ -18,6 +18,16 @@ public class Frequency owner = o; } + public Frequency(NBTTagCompound nbtTags) + { + read(nbtTags); + } + + public Frequency(ByteBuf dataStream) + { + read(dataStream); + } + public void write(NBTTagCompound nbtTags) { nbtTags.setString("name", name); diff --git a/src/main/java/mekanism/common/frequency/FrequencyManager.java b/src/main/java/mekanism/common/frequency/FrequencyManager.java index e3635a5f9..adc223299 100644 --- a/src/main/java/mekanism/common/frequency/FrequencyManager.java +++ b/src/main/java/mekanism/common/frequency/FrequencyManager.java @@ -49,6 +49,16 @@ public class FrequencyManager } } + public void validateFrequency(Frequency freq) + { + if(frequencies.contains(freq)) + { + return; + } + + + } + public void createOrLoad(World world) { if(dataHandler == null) diff --git a/src/main/java/mekanism/common/inventory/container/ContainerTeleporter.java b/src/main/java/mekanism/common/inventory/container/ContainerTeleporter.java index 573aca61f..2d82dc903 100644 --- a/src/main/java/mekanism/common/inventory/container/ContainerTeleporter.java +++ b/src/main/java/mekanism/common/inventory/container/ContainerTeleporter.java @@ -17,21 +17,21 @@ public class ContainerTeleporter extends Container public ContainerTeleporter(InventoryPlayer inventory, TileEntityTeleporter tentity) { tileEntity = tentity; - addSlotToContainer(new SlotDischarge(tentity, 0, 27, 14)); + addSlotToContainer(new SlotDischarge(tentity, 0, 153, 7)); - int slotY; + int slotX; - for(slotY = 0; slotY < 3; slotY++) + for(slotX = 0; slotX < 3; slotX++) { - for(int slotX = 0; slotX < 9; slotX++) + for(int slotY = 0; slotY < 9; slotY++) { - addSlotToContainer(new Slot(inventory, slotX + slotY * 9 + 9, 8 + slotX * 18, 84 + slotY * 18)); + addSlotToContainer(new Slot(inventory, slotY + slotX * 9 + 9, 8 + slotY * 18, 148 + slotX * 18)); } } - for(slotY = 0; slotY < 9; slotY++) + for(slotX = 0; slotX < 9; slotX++) { - addSlotToContainer(new Slot(inventory, slotY, 8 + slotY * 18, 142)); + addSlotToContainer(new Slot(inventory, slotX, 8 + slotX * 18, 206)); } tileEntity.open(inventory.player); diff --git a/src/main/java/mekanism/common/tile/TileEntityTeleporter.java b/src/main/java/mekanism/common/tile/TileEntityTeleporter.java index aba9c9217..025e4af44 100644 --- a/src/main/java/mekanism/common/tile/TileEntityTeleporter.java +++ b/src/main/java/mekanism/common/tile/TileEntityTeleporter.java @@ -1,5 +1,7 @@ package mekanism.common.tile; +import io.netty.buffer.ByteBuf; + import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; @@ -10,13 +12,14 @@ import mekanism.api.Coord4D; import mekanism.api.EnumColor; import mekanism.common.Mekanism; import mekanism.common.MekanismBlocks; +import mekanism.common.PacketHandler; import mekanism.common.Teleporter; import mekanism.common.block.BlockMachine.MachineType; +import mekanism.common.frequency.Frequency; import mekanism.common.network.PacketPortalFX.PortalFXMessage; import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.util.ChargeUtils; import mekanism.common.util.MekanismUtils; - import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.entity.player.EntityPlayerMP; @@ -34,9 +37,6 @@ import cpw.mods.fml.common.Optional.Interface; import cpw.mods.fml.common.Optional.Method; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; - -import io.netty.buffer.ByteBuf; - import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.peripheral.IComputerAccess; @@ -59,6 +59,10 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe public boolean shouldRender; public boolean prevShouldRender; + + public String owner; + + public Frequency frequency; /** This teleporter's current status. */ public byte status = 0; @@ -138,11 +142,7 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe case 3: return EnumColor.DARK_RED + MekanismUtils.localize("gui.teleporter.noLink"); case 4: - return EnumColor.DARK_RED + MekanismUtils.localize("gui.teleporter.exceeds"); - case 5: return EnumColor.DARK_RED + MekanismUtils.localize("gui.teleporter.needsEnergy"); - case 6: - return EnumColor.DARK_GREEN + MekanismUtils.localize("gui.idle"); } return EnumColor.DARK_RED + MekanismUtils.localize("gui.teleporter.noLink"); @@ -188,9 +188,7 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe * 1: yes * 2: no frame * 3: no link found - * 4: too many links - * 5: not enough electricity - * 6: nothing to teleport + * 4: not enough electricity * @return */ public byte canTeleport() @@ -205,11 +203,6 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe return 3; } - if(Mekanism.teleporters.get(code).size() > 2) - { - return 4; - } - if(Mekanism.teleporters.get(code).size() == 2) { List entitiesInPortal = getToTeleport(); @@ -232,20 +225,15 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe electricityNeeded += calculateEnergyCost(entity, closestCoords); } - if(entitiesInPortal.size() == 0) - { - return 6; - } - if(getEnergy() < electricityNeeded) { - return 5; + return 4; } return 1; } - return 3; + return 1; } public void teleport() @@ -445,6 +433,16 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe code.digitTwo = nbtTags.getInteger("digitTwo"); code.digitThree = nbtTags.getInteger("digitThree"); code.digitFour = nbtTags.getInteger("digitFour"); + + if(nbtTags.hasKey("owner")) + { + owner = nbtTags.getString("owner"); + } + + if(nbtTags.hasKey("frequency")) + { + frequency = new Frequency(nbtTags); + } } @Override @@ -456,6 +454,16 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe nbtTags.setInteger("digitTwo", code.digitTwo); nbtTags.setInteger("digitThree", code.digitThree); nbtTags.setInteger("digitFour", code.digitFour); + + if(owner != null) + { + nbtTags.setString("owner", owner); + } + + if(frequency != null) + { + frequency.write(nbtTags); + } } @Override @@ -496,6 +504,22 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe } super.handlePacketData(dataStream); + + if(dataStream.readBoolean()) + { + owner = PacketHandler.readString(dataStream); + } + else { + owner = null; + } + + if(dataStream.readBoolean()) + { + frequency = new Frequency(dataStream); + } + else { + frequency = null; + } status = dataStream.readByte(); code.digitOne = dataStream.readInt(); @@ -509,6 +533,24 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe public ArrayList getNetworkedData(ArrayList data) { super.getNetworkedData(data); + + if(owner != null) + { + data.add(true); + data.add(owner); + } + else { + data.add(false); + } + + if(frequency != null) + { + data.add(true); + frequency.write(data); + } + else { + data.add(false); + } data.add(status); data.add(code.digitOne); diff --git a/src/main/java/mekanism/common/util/MekanismUtils.java b/src/main/java/mekanism/common/util/MekanismUtils.java index d753d4992..dfc578789 100644 --- a/src/main/java/mekanism/common/util/MekanismUtils.java +++ b/src/main/java/mekanism/common/util/MekanismUtils.java @@ -15,6 +15,8 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import com.mojang.authlib.GameProfile; + import mekanism.api.Chunk3D; import mekanism.api.Coord4D; import mekanism.api.EnumColor; @@ -1350,6 +1352,11 @@ public final class MekanismUtils return false; } + public static boolean isOp(EntityPlayerMP player) + { + return player.mcServer.getConfigurationManager().func_152596_g(player.getGameProfile()); + } + public static String getMod(ItemStack stack) { try { diff --git a/src/main/resources/assets/mekanism/gui/GuiTeleporter.png b/src/main/resources/assets/mekanism/gui/GuiTeleporter.png index b0dd326bef8879e116193ca717d8bd98c59a04dc..3ddea9267e77f51dafda44981883028cf6da9a7b 100644 GIT binary patch literal 5923 zcmc(jX*^W#-^b4x6Qe9+iwI+BC<)0P#*(G1Q9{=2gzWpwkdVD7Su#@DVnnhGW~2~> zLiR0dwy~4-KEMC}esJGU?kE2T_oH*Y&biL@{d~Xg@8`PC>%ZU^J3Vg!Bx=lr39&S zGko5zSO!1nny7K~3BOkM8^X9e-Ht5wE+d+dtXgVPiCBfXKo#l_8BD8L=2V968QZaS zE1BHXn*1?CXEKsDMWJrMici zayZ|bD=w`_sf-ylruBFA{J7f4+ST8@m(a0y?1G+6U2K*<%g-!tvLI^zEdF(W)rH^Z zJ|9X;{q$B+O-=yR|>%i7t zB(}`GR`;`nP~+_G88nt-t)b=axx^p|%=(MW(AS^-ew91DXhKDe#nrg&Mi&`1x_nPV z*WC9B?o=s$lb;r96<1)#gKK{9IfLm~LY>GGPTkT6N8+Piu(4XBz z?B>pC_x;ptSFzk6I!ZIshYXsvJ>sRqaX+(6D;F17^{y6?i-wD~dQYyD6jjBh z?kQJ2BHz-v=joL4<+PDIj8HJ1K@2JeC=r)iZP+d~+jyuq$FWdO7_Y2V5Aqas;E3 z7C_#yuxK}Ud9_vpZjB9pU$KCVppLfRFY+qq!!+3i2iIme)550E-K0#;81K3GbW7=l zJPQebJ3E1_tgMdPw{Nd|E;f}`2HiW12ncdgRPu9Cq_SKjA1p7$6?8i7P{$>xNi*Uw zB{;67D_AO)f~TQ-+#=^flKG}KylpY}%zv(9Cd@x*6-8}vlCJC-Y>H}7!AcaZiRm&p zIXSHdA1$N3ZFesG!r01zGM&Zb(OQy~5NJf5T>nCyrn9zKk~?}@5Rr1Yn0wsutG}OA zYJ|}q{z2ot7``&15cq!k;Dxla+w(UQ4#-uj7dypvmUBORyOigYd+{`fmh|oi3wz@Y zp{o1c&C;8|)#-UKXrjExkPrv>een+2!$gpYQ-9itiY5C*)tfT-c0PN`HV+M6ZY=2Be#bu5kvSv^tXubbH~N*S zOC?Qz@f`5vIRKmZ(%gbX90X0iKo%>c`a3Y#3XZD3L3J~NA;75jtmr-A)la7+OjoRS zj?K#Me(lUvwRs^j!-&ANk0rNlmzWV}y$*O4{Y3dsdFzvcH{O!k>NN-^V2$@=r0@K$ z^W5B=uaHRdJN6XdYodtD!ffk97Lr1e5QN#6gyt zK&tgoJ5duugSYrqgWF<&U4GM3EC}TMp0%Aqc`pxDEk!Y_aJ81@kBh*N4e?WQt6w;6 z62{x4%wvHB`irC-9au2p{o~C0t>}_Af`*_SlP5J$K$EiWKK=K&_DK4 z#1`UfpQ2+I#694PYm;6feCdL9U&d(5@l(Ty*T_@*3G$|-;X*lOoUCX?a<~WqRAroZ zU3lv=)i1ln+WvRs^7-#QG&*00Q-_MhYFof7{@Pp6%d?e+oWB-NsWtEuE*D`hBmnFM zC#3UOyE&||thm9!!4ZZ)O4t2^A(!fttoUA4j@i?w-pZFDR1~2_g5{2-Wk*<|O*Ff( zCZo;YQNHFRUUWrw5pXA=UUT5I(_6PdkkEW4v`IUr7iY8m%aW8-W(m+odxBT=75py% z=c8J-*I2vL4|>R9Z{&5xcH`gVNH6U1EBFZ8d=;k{$lkMZTYPTcYM~o2mVq&&9+Noy zN$Vk<*mu>&LWiO%6VnYv{Zv~9A`)v$u_r4v0y`Eh|Ec*+=(wp(-M#w`a!hRyag5MK?DdP}4nr>)w zO%!PzyTLZzwmFBcUK@7*qzPX*am`;qiW!fjA8>D2_{n_T^DgeY^Gk_}`HuoypT#i? z&KTkC;S#c=Z!tGE{Z3j(Yoi`BDu7wUHn(j0G)tRIpi%YsM|WIGEM^2Y@RxGM7FM?- zk-Tkqc=Y$vD<4hNFp6cu*EYY29R{+M$6_wqWwdm0;=`S#X_2eChJAr-qJjI>*fXe( zh`pn(c-Z3NA|&bu26$`|`67jWo`jVX?B<^}bZE`7q5ruLaEqE6HvK-)X6*^8Z!7x8 zP)>uV4)U%wOy`SbY3=pRr~8q;k`F(O@$t^`upMbLqwMBd9TZvc3&Ct)VQb>ee-}6h z5A-@~f29}r2Tsz&HNxJKC_R3HzMBRy7R~j~%{c&Ol*@ZgN!ZqA?-uWqSj;VlgGClV zmH#8HItG^48X7X<{FRTEf76?50MdU1skPICI)nSE17)dU zJl}J3a=!EU*RGXJT2_duvfyLsZ0F!T6#7C=!V0-;-gByp?!a?N)_?}L0M$Rm=M`N_ z#g5R2aI-05d1@>sToQr#LjP%@95H`grEqOnx$)!hl$v?KbX)2OMi3S~we>7_Hxy{1}!8S@6|{v~b(3 z6TW!Xe+<_u0Bj8!`=}$3EQO6iKO<;w=JK2qK%T%uUM?vqF~&8=e*IS`G|rm>o!JT| z8LdHZ=dQGXCx8_=hj(5Lr+MVC80KbRoG>I&W)Di+Wam^exN-Hcwe0a zU#cvr;ch59Xl(J4Pt&euEE0jEwxm(4`=uRTJr(A4>taQV*!6tFow+zf+VNu_rYI~D zk&a^oijShojy$KZd-n>~-7%s(YC^KC=rKMoA)KQOMC&jQ;P%EqF zDoV7?D*A8l@9aC(t?c)01wN%^qK?!)EiEmrEqR(%K$nu;F?D62Y?>9^f?s5GJNS6t z$?1_L5Cv@$0&FS3fI9^ZV~t!-ANTOv7_MV4fHt@JEyVp_hxO-VR$9H3QzcZ|_@+%5 z*%w^#Ehp3ZcPdhrMWWBcQX-!VRYQHX#hdUy9d3&(S5dmIjtYWp0+E3Nv`{6F6mb8Z zAqd$$q!R-yJjm~T$kHu(>>S~Lo_Oo18P%W=Do6Q!VqkM^gE;$llZ1cf{OQ}DcZvz1 z-=j>L#CY5_c*S7}9y0mgsix8vui#}Rn5Dt}$H2cf;wrKItgda#rbch|)`98%mw5SDd$1;U=XjM0nHrn$!BTYLS84{2kMrZ**!%nbAn612|rf%15 zz>!5%E@JRiJ+v=|vnqd0;(hBm*O|kE<_T65F6Sp76CM#QLH)j(b1={5=YP=*+ZVhS z%&=1Q)_}w3_4Nw$Ybm7sgWsQZ!qUl$AIvlfKH-}j1a2}sDi-6Ycu@l-30u)=EIYbB zQ$i+nmK|uq1uu9nf5F{ z=w!;1=5l{YP!}8c-U(uEG6LTM}>>4jHj~ly0r^^L_1If&WpM0dMqA@af zgA)^ z6oSDJ0J&arCOhmsg3-=PB~KsY5nCJ`B%1!Y=|ea{55h9PjA%sc`}IVi5@ zu{|%m9*zVg_+-^lp0F`9ykV}&=)j&yfq`RueEd>DBoKCi;!%1!S0p#=XKq|+6@AbN zOlUey=Icu5u2~o*g4X0=m+hsGx5J)2e||sJwF6#r!sU!8DGH+lWuH=i%}SvAG6*L) z5|)@?0#Mo1*H8OLV>+OR&+rvWh=-a0i1=#R%K;OI5LnQ*ub_~ukTPK}V>84DJplaA z7xTIbgf|nZ@3YX`Qz8g{=v+@qrkHy5XEmhp=ba70$71>>`ds4tdKq(lGzrns(FYVU zF|o{rv*e#4Re{|XC3zCU z&TcUsjd6f-YdiZ`0m&5&VLvIpu8z74VRvBqau$)G4q=Zz9V~!610{Jm#-0hTC4d7G z)Z^=su?Y~P7aCG@uzVy2(8{}JjnLGBKz_^1purnMaq_zbCE$YpbmOeiH#|iYiev1O z$_YzlS#6;~-Ao)GUj6eZ`B>EBzB=@2Df5SgrH#2vUqutXUg=rUH%!x=G}DHTid1ie>*OD=?9W=yhmK zi>A~dE?&GiO|mvO|6w{OS%d~XLAS_!F1S4k>ivmp9yp9Xlz_fBdlZHNULS=kFwFJz zxR>?Aj+2wK$nXR{L*aQo%nW7g&j_;yyN~?rWpp(gwtAwv#=>GxE;;u)h*bmn^TwxP zc&H0ufvCP13>&l{TS!_oW&+BU!mG0-(ESjAbwA{D6hO*D@Vx16h9j;(@UG-(nUzdPHdO^p6ceiu?@#h zK#`hi6HaOnlp(F57Y9w~;P3XwoARE>Kcocm#waKms1E=CLyF5T4c4Mn$#4;pC$JRw=Fs1gQ zmNuo8Xopd0?PKp?G^nj3lu(VtR&qb)dG7t={(aB)oacPs?~n6)&-=dLds1!5=k`e} zO9KG*S&@kL0KlME7(hxui)&bg4*+7T{se-p6@h@Y4GZz{5A+5gigPEkFXRhv#dfm> ze(z%`L&;09Tdz{hX!Nsn?sN%rN<&wjZI{oe$7psoZ*g?|>7Q>`^51?sVj4PdsDesM zQ#qX-rT6MOMw@LeCS^_tB-t2dt{)-FX(tUf+fXF^TGv*)`SFFzYg?z6GZMPF4il6= z6}n@Jt1>?gueX$D{bqjO*O_oCpek~b`^Vp^w5sKX(_u^7Hqw(EVb-#U|G2V~oium= zU#l=uOE;FN57@#XW)y0;esjt6XoWfZnFAU0PPm&uLmRkVvOA56s2n(N=H<#}9vV{i znoTIEB)%+2IkF!_WR2N?r z!g&>{htsVi>|6Bu#pDg?8YO!w)2A(rZ9p>9XP|Cdtgk*&S1t*GFJRrmU%whKq`uBo zKBF@9u&?{%eg}_kZ5HP#*3Bj z1hl?qhP&&w^=$=5YkX4ct#b6%YI9{&d3-aCp<0J%%?_R#ton(-M)j|SA9b*J<0YMX zr#(&!m)YStRpO_2C(&9eHJLb7THqz&EAOh5nl^)aaJR)1^HXA@w3_{k!=Cp&8avY5 zzS0z?sXo29h>3Ha)?cX~(UJa2bF<}LWROvDh#faFm+R(2(!!~zQtKO7tP+ZSBX7is zJRV(Czmekm+oHM=4DQ3};C1fk^iZD{H;20A#V&9-)_j%tu^$9iHy^~iHI+^DA2dd8 zJH?q_?+>9jx0c=YQbMQv)`W|FX>!k|~tnMa}Z1j<&2XGZ7mj9F zM`*4%=CNAz`LmXM@mlvYzAwE{->-KIe5#GygOAJ1wh0@)7W~p^Xfs(?UjNMT=Aq{1 zDGfOby!^rRnf*Mf>oJ4WYsc67hnFz17Ncc$C#5Y>T_ZlLN{wyiNB&yz4LmMwS@^V7 z<4n!>LfqjF1nw<2@*y43U34RxFfE5AL~9}DLN?p8E`{72?hO>mYjU@qFeOZ5&!szj z?`CZzuvBzDFJa%)$w9TLt1;#d#yvkPO=2{>>HH~#{jv$)!0EhDH+c&TH;r`$@si5T zlENE!zuvzk+Nd17h_+egD8(^)663@D=a+msen767IlF9fyWhOo?!#ZD@t2yefY7L+ z%eYV|1|&SJ&k=!W_bF;D&wwgYH%M2)0gyScJ7M5{o+4C~jIg?3A^8p=qabfo7jteB z0P!>{qWR@04sYC?jI&ad{Ft7a{1Fj@q{z8pdOh-P{FthGa}<5$G}5|SS8CyTsKVk{ z<9k7%#JS6*xt4QJHn$yhbX@9=3Am3wR6RH#(u8x0Yj@fsj2Wx-Zrb-&{+gh^j2BfG zTKxXGW6iRFVM4W=6EREID8{X$XlLzvWla>8OJn5cl#~gb=!vcq`Gs{kJwBnau?-k_ zKze%mmoH!bweXw236AE(-xzZ%93HQ>J?q_oe+wMpNsj403ZN%FBAdR z&NmoVIVXr2h9N=Nei#DeK#i)qVllvL_S2_lVeTzvOSu4Bi7V0?daZU5Mtb9$kx&87 zD5kex6aQLPLM;C}DD70Ms2(31V}6KvZi;F_12mxhvppW*M;V16O0Fiiop!W62@Auk z1xm;PuWlbK%=YT2WBrO%xwaJx3k;b4cT5_LFeE?^<*s$&hoWRjdJ$nza0A<&Trun@ zIm8(YKHg1N1;%DL@Jv%QAtyVb2vEabUnXC>S(Z_V1#L5-uCA^xG8P4#%0qAiF(o+t zcy0o8q*^5sz!OJgkAjYR{;2FA9Yn>)zuSuK>+5S0+=~pFcgv-0N;m>1C#S3??)?0` zM$?M`>t&8Ef~|}9#)6J4BieV1;?OnX|Eow5PPf|#LE(Wr3c&Cv;al0&1z$|l^)V9| zet}o3H1~J%mKq>cNo#cZ6kRBQ({Be|gq=RT$H`p-$^Q2juuqOP29%h?ZrtV-KIvg8 zEuVS;r+ISfkR*+4u{~{Q&D}7F+d|ovch&iqdiUKZvSNE~t4^5~$_~;1?b6$Yj07|& zbr8=ib3ucnA0BbHXCdvB`Uf7ZD54R-9SM%Gj|+ zZ*ja=AYc{5RH;IxYJpf%^S3r?2Y7zI%aODEXht-Urx^jg0!dv-h@Y9bT`c%#%R9UN zl7*qcd-ne})hOImW~7e1ubU)|bPL?yGRDUr;X z@unPOjNKO&7|hDlq_{fVzg&vXQgg(jGy+f`^5YKjGEFfZXNx{O7K6;B2*=+Fx{ACBuqEjAKolSVJfP#2SCc@t zn1;R<^wFsT;56bczK)UY?MClL{cHqc_n*K6NKjJVfduBC>yhhct`{H?7gmMDBGI*G z#a*q@fE|3D3^$f{-i5SX$yWL19|mF`K@4Q)86f_f0egGx+4DcKfCj;kURVNIe3(2l zI<;jepFJFkt5MyH4SeL^X33!nn0#{irEZ@Srw;1zBjIIpkqt{ohCBS@M;IDo_u^~j gDoY0ZzlPNM!7Jh(Ml#bRD9iw`vLF+moOS>4-@iUmTL1t6 diff --git a/src/main/resources/assets/mekanism/gui/elements/GuiScrollList.png b/src/main/resources/assets/mekanism/gui/elements/GuiScrollList.png index af89161e9426ad51caaacd3c8920758dd20d91d2..7750dc600767a3981cf9ce92016a91d005341efc 100644 GIT binary patch delta 335 zcmV-V0kHnZ68#deAOwF%Nklkf-w8|1d*9}#k}vquZwNdG(YEe_*&R$zI{&7PmOqw=@+kITC2y36M<45M=k0tD(7Sk!$zw1%k`GvW1WEz| zprqrBKyrcQ`eiq*#p7vOohkwZW+O29Z@|yPzI{FHXVaLA5+D!@cm#-zR1iojAOO;i zR$~NW0Ra#jsURtkRzLux9j(R)!~y~!Hc~+#t$+YXJ6eqqhy?^dY@~ufS^)u&cC;EJ hvjGJj1Q=k>0>9BX7$T(jSzZ7D002ovPDHLkV1ly%kpTbz delta 242 zcmew>bX;hI0!zJ+r;B4q1>@UWwp@n{L>L}~*)&x9Jy4uu+uS|*cu~n0?3aVXZb22Gm&@G18mGn2;#JpI@Ie!cbXoBZ*dciY$4AG1i4m15yA(cTa@>E_Fd z6K(VLudkGKnlVpvsm?mb28Y{BtG8XAEX&CBUnJrStHJaR^Z#>tJnEQox&Op4y!m-M zF5#x22Imc?DJ4fZO7s>ml 2 gui.teleporter.needsEnergy=Needs energy +gui.teleporter.noAccess=You don't have access to this teleporter. +gui.teleporter.noFreq=No frequency gui.digitalMinerConfig=Digital Miner Config