updated UE api
This commit is contained in:
parent
07e2a7511a
commit
acc0bec88d
7 changed files with 202 additions and 167 deletions
|
@ -1,40 +0,0 @@
|
|||
package buildcraft.api.tools;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
public interface IToolPipette {
|
||||
|
||||
/**
|
||||
* @param pipette
|
||||
* ItemStack of the pipette.
|
||||
* @return Capacity of the pipette.
|
||||
*/
|
||||
int getCapacity(ItemStack pipette);
|
||||
|
||||
/**
|
||||
* @param pipette
|
||||
* @return true if the pipette can pipette.
|
||||
*/
|
||||
boolean canPipette(ItemStack pipette);
|
||||
|
||||
/**
|
||||
* Fills the pipette with the given liquid stack.
|
||||
*
|
||||
* @param pipette
|
||||
* @param liquid
|
||||
* @param doFill
|
||||
* @return Amount of liquid used in filling the pipette.
|
||||
*/
|
||||
int fill(ItemStack pipette, FluidStack liquid, boolean doFill);
|
||||
|
||||
/**
|
||||
* Drains liquid from the pipette
|
||||
*
|
||||
* @param pipette
|
||||
* @param maxDrain
|
||||
* @param doDrain
|
||||
* @return Fluid stack representing the liquid and amount drained from the pipette.
|
||||
*/
|
||||
FluidStack drain(ItemStack pipette, int maxDrain, boolean doDrain);
|
||||
}
|
|
@ -19,7 +19,7 @@ public class Compatibility
|
|||
* Multiply this to convert foreign energy into UE Joules.
|
||||
*/
|
||||
public static float BC3_RATIO = 1;
|
||||
public static float IC2_RATIO = 0.4f;
|
||||
public static float IC2_RATIO = 0.04f;
|
||||
|
||||
/**
|
||||
* Multiply this to convert UE Joules into foreign energy. The reciprocal conversion ratio.
|
||||
|
|
|
@ -29,7 +29,7 @@ import buildcraft.api.power.IPowerReceptor;
|
|||
*/
|
||||
public abstract class TileEntityUniversalConductor extends TileEntityConductor implements IEnergySink
|
||||
{
|
||||
protected boolean isAddedToEnergyNet;
|
||||
protected boolean isAddedToEnergyNet;
|
||||
|
||||
@Override
|
||||
public TileEntity[] getAdjacentConnections()
|
||||
|
@ -62,13 +62,13 @@ public abstract class TileEntityUniversalConductor extends TileEntityConductor i
|
|||
}
|
||||
|
||||
if (tileEntity instanceof IEnergyEmitter)
|
||||
{
|
||||
if (((IEnergyEmitter) tileEntity).emitsEnergyTo(tileEntity, side.getOpposite()))
|
||||
{
|
||||
this.adjacentConnections[i] = tileEntity;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
{
|
||||
if (((IEnergyEmitter) tileEntity).emitsEnergyTo(tileEntity, side.getOpposite()))
|
||||
{
|
||||
this.adjacentConnections[i] = tileEntity;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
this.adjacentConnections[i] = tileEntity;
|
||||
}
|
||||
|
@ -82,88 +82,89 @@ public abstract class TileEntityUniversalConductor extends TileEntityConductor i
|
|||
return this.adjacentConnections;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUpdate()
|
||||
{
|
||||
return !this.isAddedToEnergyNet;
|
||||
}
|
||||
@Override
|
||||
public boolean canUpdate()
|
||||
{
|
||||
return !this.isAddedToEnergyNet;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateEntity()
|
||||
{
|
||||
if (!this.worldObj.isRemote)
|
||||
{
|
||||
if (!this.isAddedToEnergyNet)
|
||||
{
|
||||
this.initIC();
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void updateEntity()
|
||||
{
|
||||
if (!this.worldObj.isRemote)
|
||||
{
|
||||
if (!this.isAddedToEnergyNet)
|
||||
{
|
||||
this.initIC();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidate()
|
||||
{
|
||||
this.unloadTileIC2();
|
||||
super.invalidate();
|
||||
}
|
||||
@Override
|
||||
public void invalidate()
|
||||
{
|
||||
this.unloadTileIC2();
|
||||
super.invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChunkUnload()
|
||||
{
|
||||
this.unloadTileIC2();
|
||||
super.onChunkUnload();
|
||||
}
|
||||
@Override
|
||||
public void onChunkUnload()
|
||||
{
|
||||
this.unloadTileIC2();
|
||||
super.onChunkUnload();
|
||||
}
|
||||
|
||||
protected void initIC()
|
||||
{
|
||||
if (Compatibility.isIndustrialCraft2Loaded())
|
||||
{
|
||||
MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent(this));
|
||||
}
|
||||
protected void initIC()
|
||||
{
|
||||
if (Compatibility.isIndustrialCraft2Loaded())
|
||||
{
|
||||
MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent(this));
|
||||
}
|
||||
|
||||
this.isAddedToEnergyNet = true;
|
||||
}
|
||||
this.isAddedToEnergyNet = true;
|
||||
}
|
||||
|
||||
private void unloadTileIC2()
|
||||
{
|
||||
if (this.isAddedToEnergyNet && this.worldObj != null)
|
||||
{
|
||||
if (Compatibility.isIndustrialCraft2Loaded())
|
||||
{
|
||||
MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(this));
|
||||
}
|
||||
private void unloadTileIC2()
|
||||
{
|
||||
if (this.isAddedToEnergyNet && this.worldObj != null)
|
||||
{
|
||||
if (Compatibility.isIndustrialCraft2Loaded())
|
||||
{
|
||||
MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(this));
|
||||
}
|
||||
|
||||
this.isAddedToEnergyNet = false;
|
||||
}
|
||||
}
|
||||
this.isAddedToEnergyNet = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public double demandedEnergyUnits()
|
||||
{
|
||||
if (this.getNetwork() == null)
|
||||
{
|
||||
return 0.0;
|
||||
}
|
||||
@Override
|
||||
public double demandedEnergyUnits()
|
||||
{
|
||||
if (this.getNetwork() == null)
|
||||
{
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
return this.getNetwork().getRequest(this).getWatts() * Compatibility.TO_IC2_RATIO;
|
||||
}
|
||||
return this.getNetwork().getRequest(this).getWatts() * Compatibility.TO_IC2_RATIO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double injectEnergyUnits(ForgeDirection directionFrom, double amount)
|
||||
{
|
||||
TileEntity tile = VectorHelper.getTileEntityFromSide(this.worldObj, new Vector3(this), directionFrom);
|
||||
return this.getNetwork().produce(ElectricityPack.getFromWatts((float) (amount * Compatibility.IC2_RATIO), 120.0F / 1000.0F), this, tile);
|
||||
}
|
||||
@Override
|
||||
public double injectEnergyUnits(ForgeDirection directionFrom, double amount)
|
||||
{
|
||||
TileEntity tile = VectorHelper.getTileEntityFromSide(this.worldObj, new Vector3(this), directionFrom);
|
||||
ElectricityPack pack = ElectricityPack.getFromWatts((float) (amount * Compatibility.IC2_RATIO), 120);
|
||||
return this.getNetwork().produce(pack, this, tile) * Compatibility.TO_IC2_RATIO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxSafeInput()
|
||||
{
|
||||
return Integer.MAX_VALUE;
|
||||
}
|
||||
@Override
|
||||
public int getMaxSafeInput()
|
||||
{
|
||||
return Integer.MAX_VALUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptsEnergyFrom(TileEntity emitter, ForgeDirection direction)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public boolean acceptsEnergyFrom(TileEntity emitter, ForgeDirection direction)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import java.util.ArrayList;
|
|||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
|
@ -15,6 +16,7 @@ import universalelectricity.core.block.IConductor;
|
|||
import universalelectricity.core.block.IElectrical;
|
||||
import universalelectricity.core.block.INetworkConnection;
|
||||
import universalelectricity.core.block.INetworkProvider;
|
||||
import universalelectricity.core.electricity.ElectricalEvent.ElectricityProductionEvent;
|
||||
import universalelectricity.core.electricity.ElectricalEvent.ElectricityRequestEvent;
|
||||
import universalelectricity.core.electricity.ElectricityPack;
|
||||
import universalelectricity.core.grid.ElectricityNetwork;
|
||||
|
@ -34,6 +36,88 @@ import cpw.mods.fml.common.FMLLog;
|
|||
*/
|
||||
public class UniversalNetwork extends ElectricityNetwork
|
||||
{
|
||||
@Override
|
||||
public float produce(ElectricityPack electricity, TileEntity... ignoreTiles)
|
||||
{
|
||||
ElectricityProductionEvent evt = new ElectricityProductionEvent(this, electricity, ignoreTiles);
|
||||
MinecraftForge.EVENT_BUS.post(evt);
|
||||
|
||||
float totalEnergy = electricity.getWatts();
|
||||
float networkResistance = getTotalResistance();
|
||||
float proportionWasted = getTotalResistance() / (getTotalResistance() + acceptorResistance);
|
||||
float energyWasted = totalEnergy * proportionWasted;
|
||||
float totalUsableEnergy = totalEnergy - energyWasted;
|
||||
float remainingUsableEnergy = totalUsableEnergy;
|
||||
float voltage = electricity.voltage;
|
||||
|
||||
if (!evt.isCanceled())
|
||||
{
|
||||
Set<TileEntity> avaliableEnergyTiles = this.getAcceptors();
|
||||
|
||||
if (!avaliableEnergyTiles.isEmpty())
|
||||
{
|
||||
final float totalEnergyRequest = this.getRequest(ignoreTiles).getWatts();
|
||||
|
||||
if (totalEnergyRequest > 0)
|
||||
{
|
||||
for (TileEntity tileEntity : avaliableEnergyTiles)
|
||||
{
|
||||
if (tileEntity != null && !tileEntity.isInvalid())
|
||||
{
|
||||
if (remainingUsableEnergy > 0 && !Arrays.asList(ignoreTiles).contains(tileEntity))
|
||||
{
|
||||
if (tileEntity instanceof IElectrical)
|
||||
{
|
||||
IElectrical electricalTile = (IElectrical) tileEntity;
|
||||
|
||||
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS)
|
||||
{
|
||||
if (electricalTile.canConnect(direction) && this.getConductors().contains(VectorHelper.getConnectorFromSide(tileEntity.worldObj, new Vector3(tileEntity), direction)))
|
||||
{
|
||||
float energyToSend = totalUsableEnergy * (Math.min(electricalTile.getRequest(direction), totalEnergyRequest) / totalEnergyRequest);
|
||||
|
||||
if (energyToSend > 0)
|
||||
{
|
||||
ElectricityPack electricityToSend = ElectricityPack.getFromWatts(energyToSend, voltage);
|
||||
remainingUsableEnergy -= electricalTile.receiveElectricity(direction, electricityToSend, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (Compatibility.isIndustrialCraft2Loaded() && tileEntity instanceof IEnergySink)
|
||||
{
|
||||
IEnergySink electricalTile = (IEnergySink) tileEntity;
|
||||
|
||||
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS)
|
||||
{
|
||||
TileEntity conductor = VectorHelper.getConnectorFromSide(tileEntity.worldObj, new Vector3(tileEntity), direction);
|
||||
|
||||
if (this.getConductors().contains(conductor) && electricalTile.acceptsEnergyFrom(conductor, direction))
|
||||
{
|
||||
float energyToSend = (float) Math.min(totalUsableEnergy * ((electricalTile.demandedEnergyUnits() * Compatibility.IC2_RATIO) / totalEnergyRequest), electricalTile.getMaxSafeInput() * Compatibility.IC2_RATIO);
|
||||
|
||||
if (energyToSend > 0)
|
||||
{
|
||||
remainingUsableEnergy -= electricalTile.injectEnergyUnits(direction, energyToSend * Compatibility.TO_IC2_RATIO);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.refresh();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return remainingUsableEnergy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElectricityPack getRequest(TileEntity... ignoreTiles)
|
||||
{
|
||||
|
@ -50,11 +134,11 @@ public class UniversalNetwork extends ElectricityNetwork
|
|||
continue;
|
||||
}
|
||||
|
||||
if (tileEntity instanceof IElectrical)
|
||||
if (tileEntity != null && !tileEntity.isInvalid())
|
||||
{
|
||||
if (!tileEntity.isInvalid())
|
||||
if (tileEntity.worldObj.getBlockTileEntity(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord) == tileEntity)
|
||||
{
|
||||
if (tileEntity.worldObj.getBlockTileEntity(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord) == tileEntity)
|
||||
if (tileEntity instanceof IElectrical)
|
||||
{
|
||||
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS)
|
||||
{
|
||||
|
@ -65,14 +149,8 @@ public class UniversalNetwork extends ElectricityNetwork
|
|||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Compatibility.isIndustrialCraft2Loaded() && tileEntity instanceof IEnergySink)
|
||||
{
|
||||
if (!tileEntity.isInvalid())
|
||||
{
|
||||
if (tileEntity.worldObj.getBlockTileEntity(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord) == tileEntity)
|
||||
if (Compatibility.isIndustrialCraft2Loaded() && tileEntity instanceof IEnergySink)
|
||||
{
|
||||
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS)
|
||||
{
|
||||
|
@ -84,22 +162,22 @@ public class UniversalNetwork extends ElectricityNetwork
|
|||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Compatibility.isBuildcraftLoaded() && tileEntity instanceof IPowerReceptor)
|
||||
{
|
||||
if (!tileEntity.isInvalid())
|
||||
{
|
||||
if (tileEntity.worldObj.getBlockTileEntity(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord) == tileEntity)
|
||||
if (Compatibility.isBuildcraftLoaded() && tileEntity instanceof IPowerReceptor)
|
||||
{
|
||||
/*
|
||||
* TODO: Fix unkown direction
|
||||
*
|
||||
* TODO: Fix inaccurate BuildCraft request calculation.
|
||||
*/
|
||||
requests.add(ElectricityPack.getFromWatts(((IPowerReceptor) tileEntity).getPowerReceiver(ForgeDirection.UNKNOWN).getActivationEnergy() * Compatibility.BC3_RATIO, 120));
|
||||
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS)
|
||||
{
|
||||
ElectricityPack pack = ElectricityPack.getFromWatts(((IPowerReceptor) tileEntity).getPowerReceiver(direction).powerRequest() * Compatibility.BC3_RATIO, 120);
|
||||
|
||||
if (pack.getWatts() > 0)
|
||||
{
|
||||
requests.add(pack);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
continue;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,19 +1,15 @@
|
|||
package universalelectricity.core.electricity;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import net.minecraftforge.event.ForgeSubscribe;
|
||||
import universalelectricity.core.block.IConnector;
|
||||
import universalelectricity.core.block.INetworkProvider;
|
||||
import universalelectricity.core.electricity.ElectricalEvent.ElectricityProduceEvent;
|
||||
import universalelectricity.core.grid.IElectricityNetwork;
|
||||
import universalelectricity.core.vector.Vector3;
|
||||
import universalelectricity.core.vector.VectorHelper;
|
||||
|
||||
/**
|
||||
* A helper class that provides additional useful functions to interact with the ElectricityNetwork
|
||||
|
|
|
@ -70,21 +70,24 @@ public class ElectricityNetwork implements IElectricityNetwork
|
|||
{
|
||||
for (TileEntity tileEntity : avaliableEnergyTiles)
|
||||
{
|
||||
if (tileEntity instanceof IElectrical && !Arrays.asList(ignoreTiles).contains(tileEntity))
|
||||
if (!Arrays.asList(ignoreTiles).contains(tileEntity))
|
||||
{
|
||||
IElectrical electricalTile = (IElectrical) tileEntity;
|
||||
|
||||
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS)
|
||||
if (tileEntity instanceof IElectrical)
|
||||
{
|
||||
if (electricalTile.canConnect(direction) && this.getConductors().contains(VectorHelper.getConnectorFromSide(tileEntity.worldObj, new Vector3(tileEntity), direction)))
|
||||
IElectrical electricalTile = (IElectrical) tileEntity;
|
||||
|
||||
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS)
|
||||
{
|
||||
float energyToSend = totalUsableEnergy * (electricalTile.getRequest(direction) / totalEnergyRequest);
|
||||
|
||||
if (energyToSend > 0)
|
||||
if (electricalTile.canConnect(direction) && this.getConductors().contains(VectorHelper.getConnectorFromSide(tileEntity.worldObj, new Vector3(tileEntity), direction)))
|
||||
{
|
||||
ElectricityPack electricityToSend = ElectricityPack.getFromWatts(energyToSend, voltage);
|
||||
float energyToSend = totalUsableEnergy * (electricalTile.getRequest(direction) / totalEnergyRequest);
|
||||
|
||||
remainingUsableEnergy -= ((IElectrical) tileEntity).receiveElectricity(direction, electricityToSend, true);
|
||||
if (energyToSend > 0)
|
||||
{
|
||||
ElectricityPack electricityToSend = ElectricityPack.getFromWatts(energyToSend, voltage);
|
||||
|
||||
remainingUsableEnergy -= ((IElectrical) tileEntity).receiveElectricity(direction, electricityToSend, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,14 +56,12 @@ public abstract class TileEntityElectrical extends TileEntityAdvanced implements
|
|||
*/
|
||||
public void produceUE(ForgeDirection outputDirection)
|
||||
{
|
||||
System.out.println("Outputing to side " +outputDirection.toString());
|
||||
if (!this.worldObj.isRemote && outputDirection != null && outputDirection != ForgeDirection.UNKNOWN)
|
||||
{
|
||||
float provide = this.getProvide(outputDirection);
|
||||
|
||||
if (provide > 0)
|
||||
{
|
||||
System.out.println("Outputing " +provide +"W");
|
||||
TileEntity outputTile = VectorHelper.getConnectorFromSide(this.worldObj, new Vector3(this), outputDirection);
|
||||
IElectricityNetwork outputNetwork = ElectricityHelper.getNetworkFromTileEntity(outputTile, outputDirection);
|
||||
|
||||
|
@ -73,7 +71,6 @@ public abstract class TileEntityElectrical extends TileEntityAdvanced implements
|
|||
|
||||
if (powerRequest.getWatts() > 0)
|
||||
{
|
||||
System.out.println("Request " +powerRequest +"W");
|
||||
ElectricityPack sendPack = ElectricityPack.min(ElectricityPack.getFromWatts(this.getEnergyStored(), this.getVoltage()), ElectricityPack.getFromWatts(provide, this.getVoltage()));
|
||||
float rejectedPower = outputNetwork.produce(sendPack, this);
|
||||
this.provideElectricity(sendPack.getWatts() - rejectedPower, true);
|
||||
|
|
Loading…
Reference in a new issue