package mods.eln.transparentnode.autominer; import mods.eln.i18n.I18N; import mods.eln.item.ElectricalDrillDescriptor; import mods.eln.item.MiningPipeDescriptor; import mods.eln.misc.Coordonate; import mods.eln.misc.Direction; import mods.eln.misc.LRDU; import mods.eln.misc.Utils; import mods.eln.node.AutoAcceptInventoryProxy; import mods.eln.node.NodeBase; import mods.eln.node.transparent.TransparentNode; import mods.eln.node.transparent.TransparentNodeDescriptor; import mods.eln.node.transparent.TransparentNodeElement; import mods.eln.node.transparent.TransparentNodeElementInventory; import mods.eln.sim.ElectricalLoad; import mods.eln.sim.ThermalLoad; import mods.eln.sim.mna.component.Resistor; import mods.eln.sim.nbt.NbtElectricalLoad; import mods.eln.sim.process.destruct.VoltageStateWatchDog; import mods.eln.sim.process.destruct.WorldExplosion; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.nbt.NBTTagCompound; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; public class AutoMinerElement extends TransparentNodeElement { AutoAcceptInventoryProxy inventory = (new AutoAcceptInventoryProxy(new TransparentNodeElementInventory(AutoMinerContainer.inventorySize, 64, this))) .acceptIfIncrement(2, 64, MiningPipeDescriptor.class) .acceptIfEmpty(0, ElectricalDrillDescriptor.class); NbtElectricalLoad inPowerLoad = new NbtElectricalLoad("inPowerLoad"); AutoMinerSlowProcess slowProcess = new AutoMinerSlowProcess(this); Resistor powerResistor = new Resistor(inPowerLoad, null); final AutoMinerDescriptor descriptor; Coordonate lightCoordonate; private final VoltageStateWatchDog voltageWatchdog = new VoltageStateWatchDog(); private final ArrayList<AutoMinerPowerNode> powerNodeList = new ArrayList<AutoMinerPowerNode>(); boolean powerOk = false; // Network IDs. public static final byte pushLogId = 1; public static final byte toggleSilkTouch = 2; public AutoMinerElement(TransparentNode transparentNode, TransparentNodeDescriptor descriptor) { super(transparentNode, descriptor); this.descriptor = (AutoMinerDescriptor) descriptor; electricalLoadList.add(inPowerLoad); electricalComponentList.add(powerResistor); slowProcessList.add(slowProcess); WorldExplosion exp = new WorldExplosion(this).machineExplosion(); slowProcessList.add(voltageWatchdog.set(inPowerLoad).setUNominal(this.descriptor.nominalVoltage).set(exp)); } @Override public ElectricalLoad getElectricalLoad(Direction side, LRDU lrdu) { return inPowerLoad; } @Override public ThermalLoad getThermalLoad(Direction side, LRDU lrdu) { return null; } @Override public int getConnectionMask(Direction side, LRDU lrdu) { return NodeBase.maskElectricalPower; } @Override public String multiMeterString(Direction side) { return Utils.plotUIP(inPowerLoad.getU(), inPowerLoad.getCurrent()); } @Override public String thermoMeterString(Direction side) { return ""; } @Override public void initialize() { lightCoordonate = new Coordonate(this.descriptor.lightCoord); lightCoordonate.applyTransformation(front, node.coordonate); int idx = 0; for (Coordonate c : descriptor.getPowerCoordonate(node.coordonate.world())) { AutoMinerPowerNode n = new AutoMinerPowerNode(); n.setElement(this); c.applyTransformation(front, node.coordonate); Direction dir; if (idx != 0) dir = front.left(); else dir = front.right(); n.onBlockPlacedBy(c, dir, null, null); powerNodeList.add(n); idx++; } descriptor.applyTo(inPowerLoad); connect(); } @Override public void onBreakElement() { super.onBreakElement(); slowProcess.onBreakElement(); for (AutoMinerPowerNode n : powerNodeList) { n.onBreakBlock(); } powerNodeList.clear(); } @Override public boolean onBlockActivated(EntityPlayer entityPlayer, Direction side, float vx, float vy, float vz) { return inventory.take(entityPlayer.getCurrentEquippedItem()); } @Override public boolean hasGui() { return true; } @Override public Container newContainer(Direction side, EntityPlayer player) { return new AutoMinerContainer(player, inventory.getInventory()); } @Override public IInventory getInventory() { return inventory.getInventory(); } @Override public void ghostDestroyed(int UUID) { if (UUID == descriptor.getGhostGroupUuid()) { super.ghostDestroyed(UUID); } slowProcess.ghostDestroyed(); } @Override public void networkSerialize(DataOutputStream stream) { super.networkSerialize(stream); try { stream.writeShort(slowProcess.pipeLength); stream.writeByte(slowProcess.job.ordinal()); stream.writeBoolean(powerOk); stream.writeBoolean(slowProcess.silkTouch); } catch (IOException e) { e.printStackTrace(); } } public void setPowerOk(boolean b) { if (powerOk != (powerOk = b)) { needPublish(); } } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setBoolean("powerOk", powerOk); nbt.setBoolean("silkTouch", slowProcess.silkTouch); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); powerOk = nbt.getBoolean("powerOk"); slowProcess.silkTouch = nbt.getBoolean("silkTouch"); } void pushLog(String log) { sendStringToAllClient(pushLogId, log); } @Override public byte networkUnserialize(DataInputStream stream) { byte packetType = super.networkUnserialize(stream); switch (packetType) { case toggleSilkTouch: slowProcess.toggleSilkTouch(); needPublish(); break; default: return packetType; } return unserializeNulldId; } @Override public Map<String, String> getWaila() { Map<String, String> info = new HashMap<String, String>(); info.put(I18N.tr("Silk touch"), slowProcess.silkTouch ? I18N.tr("Yes") : I18N.tr("No")); info.put(I18N.tr("Depth"), Utils.plotValue(slowProcess.pipeLength, "m ")); return info; } }