package mods.eln.sixnode.tutorialsign;
import mods.eln.misc.Direction;
import mods.eln.misc.LRDU;
import mods.eln.misc.Utils;
import mods.eln.node.six.SixNode;
import mods.eln.node.six.SixNodeDescriptor;
import mods.eln.node.six.SixNodeElement;
import mods.eln.sim.ElectricalLoad;
import mods.eln.sim.ThermalLoad;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.HashMap;
import static mods.eln.i18n.I18N.tr;
public class TutorialSignElement extends SixNodeElement {
static HashMap<String, String> baliseMap = null;
public static final int setTextFileId = 1;
String baliseName = "";
public static void resetBalise() {
baliseMap = null;
}
public static String getText(String balise) {
if (baliseMap == null) {
baliseMap = new HashMap<String, String>();
/*
try {
File fXmlFile = Utils.getMapFile("EA/tutorialSign.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
//Node root = doc.getElementById("sign");
Node root = doc.getChildNodes().item(0);
NodeList nList = root.getChildNodes();
for (int idx = 0; idx < nList.getLength(); idx++){
Node n = nList.item(idx);
n.getNamespaceURI();
}
int i = 0;
} catch (Exception e) {
}
*/
//optional, but recommended
//read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
//doc.getDocumentElement().normalize();
try {
String file = Utils.readMapFile("EA/tutorialSign.txt");
String ret;
if (file.contains("\r\n"))
ret = "\r\n";
else
ret = "\n";
file = file.replaceAll("#" + ret, "#");
file = file.replaceAll(ret + "#", "#");
String[] split = file.split("#");
boolean first = true;
int counter = 0;
String baliseTag = "";
for (String str : split) {
if (first) {
first = false;
continue;
}
if (counter == 0) {
baliseTag = str;
}
if (counter == 1) {
baliseMap.put(baliseTag, str);
}
counter = (counter + 1) & 1;
}
} catch (IOException e) {
// e.printStackTrace();
}
}
String text = baliseMap.get(balise);
if (text == null) return tr("No text associated to this beacon");
return text;
}
public TutorialSignElement(SixNode sixNode, Direction side, SixNodeDescriptor descriptor) {
super(sixNode, side, descriptor);
}
void setBalise(String name) {
baliseName = name;
needPublish();
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
setBalise(nbt.getString("baliseName"));
}
/*
private void setTextFile(String name) {
if (name.matches("^[a-zA-Z0-9]*$") == false) {
fileName = "OnlyAlphaNumeric";
text = "OnlyAlphaNumeric";
} else {
fileName = name;
try {
text = Utils.readMapFile("EATuto/" + fileName + ".txt");
} catch (IOException e) {
text = "file not found";
}
}
needPublish();
}*/
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setString("baliseName", baliseName);
}
@Override
public ElectricalLoad getElectricalLoad(LRDU lrdu) {
return null;
}
@Override
public ThermalLoad getThermalLoad(LRDU lrdu) {
return null;
}
@Override
public int getConnectionMask(LRDU lrdu) {
return 0;
}
@Override
public String multiMeterString() {
return "";
}
@Override
public String thermoMeterString() {
return "";
}
@Override
public void networkSerialize(DataOutputStream stream) {
super.networkSerialize(stream);
try {
stream.writeUTF(baliseName);
stream.writeUTF(getText(baliseName));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void networkUnserialize(DataInputStream stream) {
super.networkUnserialize(stream);
try {
switch (stream.readByte()) {
case setTextFileId:
setBalise(stream.readUTF());
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean hasGui() {
return true;
}
@Override
public void initialize() {
}
@Override
public boolean onBlockActivated(EntityPlayer entityPlayer, Direction side, float vx, float vy, float vz) {
return false;
}
}