mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
117 lines
2.8 KiB
Java
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;
|
|
}
|
|
}
|