generated from tilera/1710mod
194 lines
5.4 KiB
Java
194 lines
5.4 KiB
Java
package com.eloraam.redpower.compat;
|
|
|
|
import cofh.api.energy.IEnergyConnection;
|
|
import cofh.api.energy.IEnergyReceiver;
|
|
import com.eloraam.redpower.core.BluePowerConductor;
|
|
import com.eloraam.redpower.core.BluePowerEndpoint;
|
|
import com.eloraam.redpower.core.CoreLib;
|
|
import com.eloraam.redpower.core.IBluePowerConnectable;
|
|
import com.eloraam.redpower.core.RedPowerLib;
|
|
import com.eloraam.redpower.core.WorldCoord;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
|
|
public class TileBlueEngine extends TileMachineCompat implements IBluePowerConnectable, IEnergyConnection {
|
|
private BluePowerEndpoint cond = new BluePowerEndpoint() {
|
|
@Override
|
|
public TileEntity getParent() {
|
|
return TileBlueEngine.this;
|
|
}
|
|
};
|
|
public int ConMask = -1;
|
|
public byte PumpTick = 0;
|
|
public byte PumpSpeed = 16;
|
|
private int Flywheel = 0;
|
|
|
|
@Override
|
|
public int getConnectableMask() {
|
|
int wm = RedPowerLib.getConDirMask(super.Rotation ^ 1) | 15 << ((super.Rotation ^ 1) << 2);
|
|
return 16777215 & ~wm | 16777216 << super.Rotation;
|
|
}
|
|
|
|
@Override
|
|
public int getConnectClass(int side) {
|
|
return 65;
|
|
}
|
|
|
|
@Override
|
|
public int getCornerPowerMode() {
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public BluePowerConductor getBlueConductor(int side) {
|
|
return this.cond;
|
|
}
|
|
|
|
@Override
|
|
public void onBlockNeighborChange(Block bl) {
|
|
this.ConMask = -1;
|
|
int cm = this.getConnectableMask();
|
|
if (RedPowerLib.isPowered(super.worldObj, super.xCoord, super.yCoord, super.zCoord, cm, cm >> 24)) {
|
|
if (!super.Powered) {
|
|
super.Powered = true;
|
|
this.updateBlock();
|
|
}
|
|
} else {
|
|
super.Powered = false;
|
|
this.updateBlock();
|
|
}
|
|
|
|
}
|
|
|
|
protected void deliverPower() {
|
|
WorldCoord pos = new WorldCoord(this);
|
|
pos.step(super.Rotation ^ 1);
|
|
IEnergyReceiver ipr = CoreLib.getTileEntity(super.worldObj, pos, IEnergyReceiver.class);
|
|
ForgeDirection oppSide = ForgeDirection.getOrientation(super.Rotation);
|
|
if (ipr != null && ipr.canConnectEnergy(oppSide)) {
|
|
this.Flywheel -= ipr.receiveEnergy(oppSide, this.Flywheel * 10, false) / 10;
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onTileTick() {
|
|
}
|
|
|
|
@Override
|
|
public void updateEntity() {
|
|
super.updateEntity();
|
|
if (!super.worldObj.isRemote) {
|
|
if (this.ConMask < 0) {
|
|
this.ConMask = RedPowerLib.getConnections(super.worldObj, this, super.xCoord, super.yCoord, super.zCoord);
|
|
this.cond.recache(this.ConMask, 0);
|
|
}
|
|
|
|
this.cond.iterate();
|
|
this.markDirty();
|
|
boolean act = super.Active;
|
|
if (super.Active) {
|
|
++this.PumpTick;
|
|
int sp = this.PumpTick;
|
|
if (sp == this.PumpSpeed) {
|
|
this.deliverPower();
|
|
}
|
|
|
|
if (sp >= this.PumpSpeed * 2) {
|
|
this.PumpTick = 0;
|
|
if (this.PumpSpeed > 4) {
|
|
--this.PumpSpeed;
|
|
}
|
|
|
|
super.Active = false;
|
|
}
|
|
|
|
if (super.Powered && this.Flywheel < 512) {
|
|
double draw = Math.min((double)Math.min(512 - this.Flywheel, 32), 0.002 * this.cond.getEnergy(60.0));
|
|
this.cond.drawPower(1000.0 * draw);
|
|
this.Flywheel = (int)((double)this.Flywheel + draw);
|
|
}
|
|
|
|
this.cond.drawPower(50.0);
|
|
}
|
|
|
|
if (this.cond.getVoltage() < 60.0) {
|
|
if (super.Charged && this.cond.Flow == 0) {
|
|
super.Charged = false;
|
|
this.updateBlock();
|
|
}
|
|
} else {
|
|
if (!super.Charged) {
|
|
super.Charged = true;
|
|
this.updateBlock();
|
|
}
|
|
|
|
if (super.Charged && super.Powered) {
|
|
super.Active = true;
|
|
}
|
|
|
|
if (super.Active != act) {
|
|
if (super.Active) {
|
|
this.PumpSpeed = 16;
|
|
}
|
|
|
|
this.updateBlock();
|
|
}
|
|
}
|
|
} else if (super.Active) {
|
|
++this.PumpTick;
|
|
if (this.PumpTick >= this.PumpSpeed * 2) {
|
|
this.PumpTick = 0;
|
|
if (this.PumpSpeed > 4) {
|
|
--this.PumpSpeed;
|
|
}
|
|
}
|
|
} else {
|
|
this.PumpTick = 0;
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public int getExtendedID() {
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public void readFromNBT(NBTTagCompound tag) {
|
|
super.readFromNBT(tag);
|
|
this.cond.readFromNBT(tag);
|
|
this.PumpTick = tag.getByte("ptk");
|
|
this.PumpSpeed = tag.getByte("spd");
|
|
this.Flywheel = tag.getInteger("flyw");
|
|
}
|
|
|
|
@Override
|
|
public void writeToNBT(NBTTagCompound tag) {
|
|
super.writeToNBT(tag);
|
|
this.cond.writeToNBT(tag);
|
|
tag.setByte("ptk", this.PumpTick);
|
|
tag.setByte("spd", this.PumpSpeed);
|
|
tag.setInteger("flyw", this.Flywheel);
|
|
}
|
|
|
|
@Override
|
|
protected void readFromPacket(NBTTagCompound tag) {
|
|
super.readFromPacket(tag);
|
|
this.PumpSpeed = tag.getByte("spd");
|
|
}
|
|
|
|
@Override
|
|
protected void writeToPacket(NBTTagCompound tag) {
|
|
super.writeToPacket(tag);
|
|
tag.setByte("spd", this.PumpSpeed);
|
|
}
|
|
|
|
@Override
|
|
public boolean canConnectEnergy(ForgeDirection side) {
|
|
return side.getOpposite() == ForgeDirection.getOrientation(super.Rotation);
|
|
}
|
|
}
|