package mods.eln.sixnode.lampsupply;
import mods.eln.gui.*;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.HashMap;
import static mods.eln.i18n.I18N.tr;
public class LampSupplyGui extends GuiContainerEln {
private LampSupplyRender render;
private HashMap<Object, Integer> powerMap = new HashMap<Object, Integer>();
private HashMap<Object, Integer> wirelessMap = new HashMap<Object, Integer>();
public LampSupplyGui(LampSupplyRender render, EntityPlayer player, IInventory inventory) {
super(new LampSupplyContainer(player, inventory));
this.render = render;
}
class AggregatorBt extends GuiButtonEln {
byte id;
int channel;
public AggregatorBt(int x, int y, int width, int height, String str, int channel, byte id) {
super(x, y, width, height, str);
this.id = id;
this.channel = channel;
}
@Override
public void onMouseClicked() {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream stream = new DataOutputStream(bos);
render.preparePacketForServer(stream);
stream.writeByte(LampSupplyElement.setSelectedAggregator);
stream.writeByte(channel);
stream.writeByte(id);
render.sendPacketToServer(bos);
} catch (IOException e) {
e.printStackTrace();
}
super.onMouseClicked();
}
@Override
public void idraw(int x, int y, float f) {
this.enabled = render.entries.get(channel).aggregator != id;
super.idraw(x, y, f);
}
}
@Override
public void initGui() {
super.initGui();
int y = 6;
int x;
for (int id = 0; id < render.descriptor.channelCount; id++) {
x = 6;
LampSupplyElement.Entry e = render.entries.get(id);
GuiTextFieldEln powerChannel = newGuiTextField(x, y, 101);
x += powerChannel.getWidth() + 12;
powerChannel.setText(e.powerChannel);
powerChannel.setComment(0, tr("Power channel name"));
powerMap.put(powerChannel, id);
GuiTextFieldEln wirelessChannel = newGuiTextField(x, y, 101);
x += wirelessChannel.getWidth() + 12;
wirelessChannel.setText(e.wirelessChannel);
wirelessChannel.setComment(0, tr("Wireless channel name"));
wirelessMap.put(wirelessChannel, id);
y += wirelessChannel.getHeight() + 2;
x = 6;
int w = 68;
AggregatorBt buttonBigger, buttonSmaller, buttonToogle;
add(buttonBigger = new AggregatorBt(x, y, w, 20, tr("Biggest"), id, (byte) 0));
x += 2 + w;
add(buttonSmaller = new AggregatorBt(x, y, w, 20, tr("Smallest"), id, (byte) 1));
x += 2 + w;
add(buttonToogle = new AggregatorBt(x, y, w, 20, tr("Toggle"), id, (byte) 2));
x += 2 + w;
buttonBigger.setHelper(helper);
int lineNumber = 0;
for (String line : tr("Uses the biggest\nvalue on the channel.").split("\n"))
buttonBigger.setComment(lineNumber++, line);
buttonSmaller.setHelper(helper);
lineNumber = 0;
for (String line : tr("Uses the smallest\nvalue on the channel.").split("\n"))
buttonSmaller.setComment(lineNumber++, line);
buttonToogle.setHelper(helper);
lineNumber = 0;
for (String line : tr("Toggles the output each time\nan emitter's value rises.\nUseful to allow multiple buttons\nto control the same light.").split("\n"))
buttonToogle.setComment(lineNumber++, line);
y += buttonToogle.height + 6;
}
}
@Override
protected GuiHelperContainer newHelper() {
return new GuiHelperContainer(this, 220, 205, 8, 125);
}
@Override
public void guiObjectEvent(IGuiObject object) {
if (powerMap.containsKey(object)) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream stream = new DataOutputStream(bos);
render.preparePacketForServer(stream);
stream.writeByte(LampSupplyElement.setPowerName);
stream.writeByte(powerMap.get(object));
stream.writeUTF(((GuiTextFieldEln) object).getText());
render.sendPacketToServer(bos);
} catch (IOException e) {
e.printStackTrace();
}
}
if (wirelessMap.containsKey(object)) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream stream = new DataOutputStream(bos);
render.preparePacketForServer(stream);
stream.writeByte(LampSupplyElement.setWirelessName);
stream.writeByte(wirelessMap.get(object));
stream.writeUTF(((GuiTextFieldEln) object).getText());
render.sendPacketToServer(bos);
} catch (IOException e) {
e.printStackTrace();
}
}
super.guiObjectEvent(object);
}
}