494d98bb05
I've made a mess of changes since last upload. Main big change is change in forge file formate that merged minecraft and common folder. The other is the complete rewrite to Forge Liquid api. So far only the pump, boiler, and pipe are converted to the new system. The pipe will actual not fully work with most machines since it can't drain liquids out of machines. In future update there will be a block to do this called a pipe pump. Other than those changes nothing much is diffrent.
212 lines
5.8 KiB
Java
212 lines
5.8 KiB
Java
package dark.BasicUtilities.mechanical;
|
|
|
|
import java.util.EnumSet;
|
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.network.INetworkManager;
|
|
import net.minecraft.network.packet.Packet250CustomPayload;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraftforge.common.ForgeDirection;
|
|
import universalelectricity.core.electricity.ElectricityConnections;
|
|
import universalelectricity.core.electricity.ElectricityNetwork;
|
|
import universalelectricity.core.implement.IConductor;
|
|
import universalelectricity.core.vector.Vector3;
|
|
import universalelectricity.prefab.network.IPacketReceiver;
|
|
import universalelectricity.prefab.tile.TileEntityElectricityProducer;
|
|
|
|
import com.google.common.io.ByteArrayDataInput;
|
|
|
|
import dark.BasicUtilities.BasicUtilitiesMain;
|
|
import dark.BasicUtilities.api.IForce;
|
|
import dark.BasicUtilities.api.IReadOut;
|
|
import dark.BasicUtilities.api.MHelper;
|
|
|
|
public class TileEntityGen extends TileEntityElectricityProducer implements IPacketReceiver, IForce, IReadOut
|
|
{
|
|
ForgeDirection facing = ForgeDirection.DOWN;
|
|
|
|
public int force = 0;// current total force
|
|
public int aForce = 0;// force this unit can apply
|
|
public int pos = 0;// current pos of rotation max of 8
|
|
public int disableTicks = 0;// time disabled
|
|
public double genAmmount = 0;// watt output of machine
|
|
public int tCount = 0;
|
|
|
|
IConductor[] wires =
|
|
{ null, null, null, null, null, null };
|
|
|
|
public boolean needUpdate()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public void initiate()
|
|
{
|
|
ElectricityConnections.registerConnector(this, EnumSet.of(ForgeDirection.UP));
|
|
ElectricityConnections.registerConnector(this, EnumSet.of(ForgeDirection.DOWN));
|
|
this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord, this.zCoord, BasicUtilitiesMain.generator.blockID);
|
|
}
|
|
|
|
@Override
|
|
public void updateEntity()
|
|
{
|
|
this.genAmmount = force / this.getVoltage();
|
|
|
|
int wireCount = 0;
|
|
TileEntity[] ents = MHelper.getSourounding(worldObj, xCoord, yCoord, zCoord);
|
|
this.wires = new IConductor[6];
|
|
for (int i = 0; i < ents.length; i++)
|
|
{
|
|
if (ents[i] instanceof IConductor)
|
|
{
|
|
this.wires[i] = (IConductor) ents[i];
|
|
wireCount++;
|
|
}
|
|
}
|
|
if (!this.worldObj.isRemote)
|
|
{
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
//TODO set up for other sides
|
|
if (i == 0 || i == 1)
|
|
{
|
|
ForgeDirection outputDirection = ForgeDirection.getOrientation(i);
|
|
TileEntity outputTile = Vector3.getConnectorFromSide(this.worldObj, new Vector3(this.xCoord, this.yCoord, this.zCoord), outputDirection);
|
|
|
|
ElectricityNetwork network = ElectricityNetwork.getNetworkFromTileEntity(outputTile, outputDirection);
|
|
this.outputEnergy(network, wires[i], outputTile);
|
|
}
|
|
}
|
|
}
|
|
|
|
super.updateEntity();
|
|
}
|
|
|
|
public void outputEnergy(ElectricityNetwork network, IConductor connectedElectricUnit, TileEntity outputTile)
|
|
{
|
|
if (network != null)
|
|
{
|
|
if (network.getRequest().getWatts() > 0)
|
|
{
|
|
connectedElectricUnit = (IConductor) outputTile;
|
|
}
|
|
else
|
|
{
|
|
connectedElectricUnit = null;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
connectedElectricUnit = null;
|
|
}
|
|
|
|
if (connectedElectricUnit != null)
|
|
{
|
|
if (this.genAmmount > 0)
|
|
{
|
|
connectedElectricUnit.getNetwork().startProducing(this, (this.genAmmount / this.getVoltage()) / 20, this.getVoltage());
|
|
}
|
|
else
|
|
{
|
|
connectedElectricUnit.getNetwork().stopProducing(this);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* does the basic animation for the model
|
|
*/
|
|
public void doAnimation()
|
|
{
|
|
if (worldObj.isRemote)
|
|
{
|
|
this.pos += 1;
|
|
if (pos >= 8 || pos < 0)
|
|
{
|
|
pos = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
// ------------------------------
|
|
// Data handling
|
|
// ------------------------------
|
|
@Override
|
|
public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput data)
|
|
{
|
|
// TODO Auto-generated method stub
|
|
|
|
}
|
|
// ------------------------------
|
|
// Mechanics
|
|
// ------------------------------
|
|
@Override
|
|
public int getForceSide(ForgeDirection side)
|
|
{
|
|
if (side == facing.getOpposite()) { return aForce; }
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public int getForce()
|
|
{
|
|
return this.force;
|
|
}
|
|
|
|
@Override
|
|
public boolean canOutputSide(ForgeDirection side)
|
|
{
|
|
if (side == facing.getOpposite()) { return true; }
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean canInputSide(ForgeDirection side)
|
|
{
|
|
if (side == facing) { return true; }
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public int applyForce(int force)
|
|
{
|
|
this.force = force;
|
|
return force;
|
|
}
|
|
|
|
@Override
|
|
public int getAnimationPos()
|
|
{
|
|
return pos;
|
|
}
|
|
|
|
// ------------------------------
|
|
// Electric
|
|
// ------------------------------
|
|
@Override
|
|
public void onDisable(int duration)
|
|
{
|
|
this.disableTicks = duration;
|
|
}
|
|
|
|
@Override
|
|
public boolean isDisabled()
|
|
{
|
|
if (disableTicks-- <= 0) { return false; }
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public double getVoltage()
|
|
{
|
|
return 120;
|
|
}
|
|
|
|
@Override
|
|
public String getMeterReading(EntityPlayer user, ForgeDirection side)
|
|
{
|
|
return this.force + "N Input " + this.genAmmount + "W output";
|
|
}
|
|
|
|
}
|