package mods.eln.transparentnode.thermaldissipatoractive; import mods.eln.Eln; import mods.eln.i18n.I18N; import mods.eln.misc.Direction; import mods.eln.misc.LRDU; import mods.eln.misc.Utils; import mods.eln.node.NodePeriodicPublishProcess; import mods.eln.node.transparent.TransparentNode; import mods.eln.node.transparent.TransparentNodeDescriptor; import mods.eln.node.transparent.TransparentNodeElement; 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.nbt.NbtThermalLoad; import mods.eln.sim.process.destruct.ThermalLoadWatchDog; import mods.eln.sim.process.destruct.VoltageStateWatchDog; import mods.eln.sim.process.destruct.WorldExplosion; import net.minecraft.entity.player.EntityPlayer; import java.io.DataOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class ThermalDissipatorActiveElement extends TransparentNodeElement { ThermalDissipatorActiveDescriptor descriptor; NbtThermalLoad thermalLoad = new NbtThermalLoad("thermalLoad"); NbtElectricalLoad positiveLoad = new NbtElectricalLoad("positiveLoad"); ThermalDissipatorActiveSlowProcess slowProcess = new ThermalDissipatorActiveSlowProcess(this); Resistor powerResistor = new Resistor(positiveLoad, null); public ThermalDissipatorActiveElement(TransparentNode transparentNode, TransparentNodeDescriptor descriptor) { super(transparentNode, descriptor); thermalLoadList.add(thermalLoad); electricalLoadList.add(positiveLoad); electricalComponentList.add(powerResistor); slowProcessList.add(slowProcess); this.descriptor = (ThermalDissipatorActiveDescriptor) descriptor; slowProcessList.add(new NodePeriodicPublishProcess(node, 4f, 2f)); slowProcessList.add(thermalWatchdog); thermalWatchdog .set(thermalLoad) .setTMax(this.descriptor.warmLimit) .set(new WorldExplosion(this).machineExplosion()); WorldExplosion exp = new WorldExplosion(this).machineExplosion(); slowProcessList.add(voltageWatchdog.set(positiveLoad).setUNominal(this.descriptor.nominalElectricalU).set(exp)); } VoltageStateWatchDog voltageWatchdog = new VoltageStateWatchDog(); ThermalLoadWatchDog thermalWatchdog = new ThermalLoadWatchDog(); @Override public ElectricalLoad getElectricalLoad(Direction side, LRDU lrdu) { if (side == front || side == front.getInverse()) return positiveLoad; return null; } @Override public ThermalLoad getThermalLoad(Direction side, LRDU lrdu) { if (side == Direction.YN || side == Direction.YP || lrdu != lrdu.Down) return null; if (side == front || side == front.getInverse()) return null; return thermalLoad; } @Override public int getConnectionMask(Direction side, LRDU lrdu) { if (side == Direction.YN || side == Direction.YP || lrdu != lrdu.Down) return 0; if (side == front || side == front.getInverse()) return node.maskElectricalPower; return node.maskThermal; } @Override public String multiMeterString(Direction side) { return Utils.plotVolt("U : ", positiveLoad.getU()) + Utils.plotAmpere("I : ", positiveLoad.getCurrent()); } @Override public String thermoMeterString(Direction side) { return Utils.plotCelsius("T : ", thermalLoad.Tc) + Utils.plotPower("P : ", thermalLoad.getPower()); } @Override public void initialize() { descriptor.applyTo(thermalLoad); descriptor.applyTo(positiveLoad, powerResistor); connect(); } @Override public boolean onBlockActivated(EntityPlayer entityPlayer, Direction side, float vx, float vy, float vz) { return false; } @Override public void networkSerialize(DataOutputStream stream) { super.networkSerialize(stream); try { stream.writeFloat(lastPowerFactor = (float) (powerResistor.getP() / descriptor.electricalNominalP)); } catch (IOException e) { e.printStackTrace(); } //Utils.println("DISIP"); } public float lastPowerFactor; @Override public Map<String, String> getWaila() { Map<String, String> info = new HashMap<String, String>(); info.put(I18N.tr("Temperature"), Utils.plotCelsius("", thermalLoad.Tc)); if (Eln.wailaEasyMode) { info.put(I18N.tr("Thermal power"), Utils.plotPower("", thermalLoad.getPower())); } return info; } }