assemblyline/src/main/java/assemblyline/common/machine/TileEntityAssemblyNetwork.java
2023-02-10 17:51:10 +01:00

79 lines
2.7 KiB
Java

package assemblyline.common.machine;
import assemblyline.common.AssemblyLine;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import universalelectricity.core.electricity.ElectricityPack;
import universalelectricity.prefab.tile.TileEntityElectricityRunnable;
public abstract class TileEntityAssemblyNetwork extends TileEntityElectricityRunnable {
public int powerTransferRange = 0;
public boolean isRunning() {
return AssemblyLine.REQUIRE_NO_POWER || this.powerTransferRange > 0
|| this.wattsReceived > this.getRequest().getWatts();
}
public void updatePowerTransferRange() {
int maximumTransferRange = 0;
for (int i = 0; i < 6; ++i) {
ForgeDirection direction = ForgeDirection.getOrientation((int) i);
TileEntity tileEntity = this.worldObj.getTileEntity(
this.xCoord + direction.offsetX,
this.yCoord + direction.offsetY,
this.zCoord + direction.offsetZ
);
if (tileEntity == null || !(tileEntity instanceof TileEntityAssemblyNetwork))
continue;
TileEntityAssemblyNetwork assemblyNetwork
= (TileEntityAssemblyNetwork) tileEntity;
if (assemblyNetwork.powerTransferRange <= maximumTransferRange)
continue;
maximumTransferRange = assemblyNetwork.powerTransferRange;
}
this.powerTransferRange = Math.max(maximumTransferRange - 1, 0);
}
@Override
public void updateEntity() {
super.updateEntity();
this.onUpdate();
if (this.ticks % 10L == 0L) {
if (this.wattsReceived >= this.getRequest().getWatts()) {
this.wattsReceived -= this.getRequest().getWatts();
this.powerTransferRange = this.getMaxTransferRange();
} else {
this.powerTransferRange = 0;
this.updatePowerTransferRange();
}
if (!this.worldObj.isRemote) {
this.worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
}
}
}
protected void onUpdate() {}
@Override
public ElectricityPack getRequest() {
return new ElectricityPack(1.0, this.getVoltage());
}
protected int getMaxTransferRange() {
return 20;
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setDouble("wattsReceived", this.wattsReceived);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.wattsReceived = nbt.getDouble("wattsReceived");
}
}