117 lines
2.8 KiB
Java

package com.hbm.tileentity.machine;
import com.hbm.lib.Library;
import api.hbm.energy.IEnergyConductor;
import api.hbm.energy.IEnergyConnector;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityMachineFENSU extends TileEntityMachineBattery {
public float prevRotation = 0F;
public float rotation = 0F;
@Override
public void updateEntity() {
this.maxPower = Long.MAX_VALUE;
if(!worldObj.isRemote) {
this.transmitPower();
power = Library.chargeTEFromItems(slots, 0, power, maxPower);
power = Library.chargeItemsFromTE(slots, 1, power, maxPower);
NBTTagCompound nbt = new NBTTagCompound();
nbt.setLong("power", power);
nbt.setLong("maxPower", maxPower);
nbt.setShort("redLow", redLow);
nbt.setShort("redHigh", redHigh);
this.networkPack(nbt, 250);
} else {
this.prevRotation = this.rotation;
this.rotation += this.getSpeed();
if(rotation >= 360) {
rotation -= 360;
prevRotation -= 360;
}
for(int i = 1; i < this.log.length; i++) {
this.log[i - 1] = this.log[i];
}
this.log[19] = this.power;
}
}
protected void transmitPower() {
short mode = (short) this.getRelevantMode();
ForgeDirection dir = ForgeDirection.DOWN;
TileEntity te = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ);
if(te instanceof IEnergyConductor) {
IEnergyConductor con = (IEnergyConductor) te;
if(con.getPowerNet() != null && con.getPowerNet().isSubscribed(this))
con.getPowerNet().unsubscribe(this);
}
if(mode == 1 || mode == 2) {
if(te instanceof IEnergyConnector) {
IEnergyConnector con = (IEnergyConnector) te;
long oldPower = this.power;
long transfer = this.power - con.transferPower(this.power);
this.power = oldPower - transfer;
}
}
if(te instanceof IEnergyConductor) {
IEnergyConductor con = (IEnergyConductor) te;
if(con.getPowerNet() != null) {
if(mode == 1 || mode == 2) {
if(con.getPowerNet().isSubscribed(this)) {
con.getPowerNet().unsubscribe(this);
}
} else if(!con.getPowerNet().isSubscribed(this)) {
con.getPowerNet().subscribe(this);
}
}
}
}
@Override
public long getPowerRemainingScaled(long i) {
double powerScaled = (double)power / (double)maxPower;
return (long)(i * powerScaled);
}
public float getSpeed() {
return (float) Math.pow(Math.log(power * 0.75 + 1) * 0.05F, 5);
}
@Override
public AxisAlignedBB getRenderBoundingBox() {
return TileEntity.INFINITE_EXTENT_AABB;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared()
{
return 65536.0D;
}
}