package mods.eln.transparentnode.heatfurnace; import mods.eln.misc.Coordonate; import mods.eln.misc.Direction; import mods.eln.misc.PhysicalInterpolator; import mods.eln.misc.Utils; import mods.eln.node.NodeBase; import mods.eln.node.transparent.TransparentNodeDescriptor; import mods.eln.node.transparent.TransparentNodeElementInventory; import mods.eln.node.transparent.TransparentNodeElementRender; import mods.eln.node.transparent.TransparentNodeEntity; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; public class HeatFurnaceRender extends TransparentNodeElementRender { double temperature; float gainSyncValue = -1234, temperatureTargetSyncValue = -1234; boolean gainSyncNew = false, temperatureTargetSyncNew = false; short power; public boolean controleExternal, takeFuel; HeatFurnaceDescriptor descriptor; Coordonate coord; PhysicalInterpolator interpolator; float counter = 0; TransparentNodeElementInventory inventory = new HeatFurnaceInventory(4, 64, this); boolean boot = true; EntityItem entityItemIn; public HeatFurnaceRender(TransparentNodeEntity tileEntity, TransparentNodeDescriptor descriptor) { super(tileEntity, descriptor); this.descriptor = (HeatFurnaceDescriptor) descriptor; interpolator = new PhysicalInterpolator(0.4f, 8.0f, 0.9f, 0.2f); coord = new Coordonate(tileEntity); } @Override public void draw() { front.glRotateXnRef(); descriptor.draw(interpolator.get()); if (entityItemIn != null) drawEntityItem(entityItemIn, -0.1, -0.30, 0, counter, 0.8f); } @Override public void refresh(float deltaT) { if (!Utils.isPlayerAround(tileEntity.getWorldObj(), coord.getAxisAlignedBB(1))) interpolator.setTarget(0f); else interpolator.setTarget(1f); interpolator.step(deltaT); counter += deltaT * 60; if (counter >= 360f) counter -= 360; } @Override public GuiScreen newGuiDraw(Direction side, EntityPlayer player) { return new HeatFurnaceGuiDraw(player, inventory, this); } @Override public void networkUnserialize(DataInputStream stream) { super.networkUnserialize(stream); try { controleExternal = stream.readBoolean(); takeFuel = stream.readBoolean(); temperature = stream.readShort() / NodeBase.networkSerializeTFactor; float readF; readF = stream.readFloat(); if (gainSyncValue != readF || controleExternal) { gainSyncValue = readF; gainSyncNew = true; } readF = stream.readFloat(); if (temperatureTargetSyncValue != readF || controleExternal) { temperatureTargetSyncValue = readF; temperatureTargetSyncNew = true; } power = stream.readShort(); entityItemIn = unserializeItemStackToEntityItem(stream, entityItemIn); if (boot) { coord.move(front); //coord.move(front); boot = false; } } catch (IOException e) { e.printStackTrace(); } } public void clientToogleControl() { clientSendId(HeatFurnaceElement.unserializeToogleControlExternalId); } public void clientToogleTakeFuel() { clientSendId(HeatFurnaceElement.unserializeToogleTakeFuelId); } public void clientSetGain(float value) { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); DataOutputStream stream = new DataOutputStream(bos); preparePacketForServer(stream); stream.writeByte(HeatFurnaceElement.unserializeGain); stream.writeFloat(value); sendPacketToServer(bos); } catch (IOException e) { e.printStackTrace(); } } public void clientSetTemperatureTarget(float value) { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); DataOutputStream stream = new DataOutputStream(bos); preparePacketForServer(stream); stream.writeByte(HeatFurnaceElement.unserializeTemperatureTarget); stream.writeFloat(value); sendPacketToServer(bos); } catch (IOException e) { e.printStackTrace(); } } @Override public boolean cameraDrawOptimisation() { return false; } }