redpower/src/main/java/com/eloraam/redpower/control/GuiDisplay.java

125 lines
4.1 KiB
Java

package com.eloraam.redpower.control;
import com.eloraam.redpower.RedPowerCore;
import com.eloraam.redpower.core.PacketGuiEvent;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.inventory.IInventory;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
public class GuiDisplay extends GuiContainer {
private static ResourceLocation screenTextures = new ResourceLocation("rpcontrol", "textures/gui/displaygui.png");
private TileDisplay disp;
public GuiDisplay(IInventory inv, TileDisplay td) {
super(new ContainerDisplay(inv, td));
super.xSize = 350;
super.ySize = 230;
this.disp = td;
}
private void sendKey(int id) {
RedPowerCore.sendPacketToServer(new PacketGuiEvent.GuiMessageEvent(1, super.inventorySlots.windowId, (byte)id));
}
protected void keyTyped(char symbol, int key) {
if (key == 1) {
super.mc.thePlayer.closeScreen();
} else {
if (symbol == '\n') {
symbol = '\r';
}
byte id = 0;
if (isShiftKeyDown()) {
id = (byte)(id | 64);
}
if (isCtrlKeyDown()) {
id = (byte)(id | 32);
}
switch(key) {
case 199:
this.sendKey(132 | id);
break;
case 200:
this.sendKey(128 | id);
break;
case 201:
case 202:
case 204:
case 206:
case 209:
default:
if (symbol > 0 && symbol <= 127) {
this.sendKey(symbol);
}
break;
case 203:
this.sendKey(130 | id);
break;
case 205:
this.sendKey(131 | id);
break;
case 207:
this.sendKey(133 | id);
break;
case 208:
this.sendKey(129 | id);
break;
case 210:
this.sendKey(134 | id);
}
}
}
public void drawGuiContainerBackgroundLayer(float f, int i, int j) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
super.mc.renderEngine.bindTexture(screenTextures);
int l = (super.width - super.xSize) / 2;
int m = (super.height - super.ySize) / 2;
this.drawDoubledRect(l, m, super.xSize, super.ySize, 0, 0, super.xSize, super.ySize);
GL11.glColor4f(0.0F, 1.0F, 0.0F, 1.0F);
for(int y = 0; y < 50; ++y) {
for(int x = 0; x < 80; ++x) {
int b = this.disp.screen[y * 80 + x] & 255;
if (x == this.disp.cursX && y == this.disp.cursY) {
if (this.disp.cursMode == 1) {
b ^= 128;
}
if (this.disp.cursMode == 2) {
long tm = super.mc.theWorld.getWorldTime();
if ((tm >> 2 & 1L) > 0L) {
b ^= 128;
}
}
}
if (b != 32) {
this.drawDoubledRect(l + 15 + x * 4, m + 15 + y * 4, 4, 4, 350 + (b & 15) * 8, (b >> 4) * 8, 8, 8);
}
}
}
}
public void drawDoubledRect(int xPos, int yPos, int width, int heigth, int uStart, int vStart, int uEnd, int vEnd) {
float xm = 0.001953125F;
float ym = 0.00390625F;
Tessellator tess = Tessellator.instance;
tess.startDrawingQuads();
tess.addVertexWithUV((double)xPos, (double)(yPos + heigth), (double)super.zLevel, (double)((float)uStart * xm), (double)((float)(vStart + vEnd) * ym));
tess.addVertexWithUV(
(double)(xPos + width), (double)(yPos + heigth), (double)super.zLevel, (double)((float)(uStart + uEnd) * xm), (double)((float)(vStart + vEnd) * ym)
);
tess.addVertexWithUV((double)(xPos + width), (double)yPos, (double)super.zLevel, (double)((float)(uStart + uEnd) * xm), (double)((float)vStart * ym));
tess.addVertexWithUV((double)xPos, (double)yPos, (double)super.zLevel, (double)((float)uStart * xm), (double)((float)vStart * ym));
tess.draw();
}
}