Updated UE API
This commit is contained in:
parent
e228e11031
commit
791c60fd77
|
@ -5,6 +5,7 @@ import net.minecraft.world.World;
|
|||
import net.minecraftforge.event.Cancelable;
|
||||
import net.minecraftforge.event.Event;
|
||||
import universalelectricity.core.block.IElectrical;
|
||||
import universalelectricity.core.grid.IElectricityNetwork;
|
||||
|
||||
public class ElectricalEvent extends Event
|
||||
{
|
||||
|
@ -27,34 +28,40 @@ public class ElectricalEvent extends Event
|
|||
}
|
||||
}
|
||||
|
||||
public static class NetworkEvent extends ElectricalEvent
|
||||
{
|
||||
public final IElectricityNetwork network;
|
||||
public ElectricityPack electricityPack;
|
||||
public TileEntity[] ignoreTiles;
|
||||
|
||||
public NetworkEvent(IElectricityNetwork network, ElectricityPack electricityPack, TileEntity... ignoreTiles)
|
||||
{
|
||||
this.network = network;
|
||||
this.electricityPack = electricityPack;
|
||||
this.ignoreTiles = ignoreTiles;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal Events
|
||||
* Internal Events. These events are fired when something happens in the network.
|
||||
*
|
||||
* @author Calclavia
|
||||
*
|
||||
*/
|
||||
@Cancelable
|
||||
public static class ElectricityProductionEvent extends ElectricalEvent
|
||||
public static class ElectricityProductionEvent extends NetworkEvent
|
||||
{
|
||||
public ElectricityPack electricityPack;
|
||||
public TileEntity[] ignoreTiles;
|
||||
|
||||
public ElectricityProductionEvent(ElectricityPack electricityPack, TileEntity... ignoreTiles)
|
||||
public ElectricityProductionEvent(IElectricityNetwork network, ElectricityPack electricityPack, TileEntity... ignoreTiles)
|
||||
{
|
||||
this.electricityPack = electricityPack;
|
||||
this.ignoreTiles = ignoreTiles;
|
||||
super(network, electricityPack, ignoreTiles);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ElectricityRequestEvent extends ElectricalEvent
|
||||
public static class ElectricityRequestEvent extends NetworkEvent
|
||||
{
|
||||
public ElectricityPack electricityPack;
|
||||
public TileEntity[] ignoreTiles;
|
||||
|
||||
public ElectricityRequestEvent(ElectricityPack electricityPack, TileEntity... ignoreTiles)
|
||||
public ElectricityRequestEvent(IElectricityNetwork network, ElectricityPack electricityPack, TileEntity... ignoreTiles)
|
||||
{
|
||||
this.electricityPack = electricityPack;
|
||||
this.ignoreTiles = ignoreTiles;
|
||||
super(network, electricityPack, ignoreTiles);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,56 +23,6 @@ import universalelectricity.core.vector.VectorHelper;
|
|||
*/
|
||||
public class ElectricityHelper
|
||||
{
|
||||
@ForgeSubscribe
|
||||
public void onProduce(ElectricityProduceEvent evt)
|
||||
{
|
||||
// Needs work with shuffling to be able to evenly distribute to all
|
||||
// connected networks
|
||||
// instead of just defaulting to one of them.
|
||||
Vector3 position = new Vector3((TileEntity) evt.tileEntity);
|
||||
HashMap<IElectricityNetwork, ForgeDirection> networks = new HashMap<IElectricityNetwork, ForgeDirection>();
|
||||
|
||||
for (ForgeDirection direction : getDirections((TileEntity) evt.tileEntity))
|
||||
{
|
||||
IElectricityNetwork network = getNetworkFromTileEntity(VectorHelper.getTileEntityFromSide(evt.world, position, direction), direction.getOpposite());
|
||||
|
||||
if (network != null)
|
||||
{
|
||||
networks.put(network, direction);
|
||||
ElectricityPack provided = evt.tileEntity.provideElectricity(direction, network.getRequest((TileEntity) evt.tileEntity), true);
|
||||
|
||||
if (provided != null && provided.getWatts() > 0)
|
||||
{
|
||||
network.produce(provided, (TileEntity) evt.tileEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* ElectricityPack request = this.getNetwork().getRequest(this);
|
||||
*
|
||||
* if (request.getWatts() > 0) { List<ElectricityPack> providedPacks = new
|
||||
* ArrayList<ElectricityPack>(); List<TileEntity> tileEntities = new
|
||||
* ArrayList<TileEntity>();
|
||||
*
|
||||
* for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { Vector3 position = new
|
||||
* Vector3(this).modifyPositionFromSide(direction); TileEntity tileEntity =
|
||||
* position.getTileEntity(this.worldObj);
|
||||
*
|
||||
* if (tileEntity instanceof IElectrical) { tileEntities.add(tileEntity); IElectrical
|
||||
* electrical = (IElectrical) tileEntity;
|
||||
*
|
||||
* if (electrical.canConnect(direction.getOpposite())) { if
|
||||
* (electrical.getProvide(direction.getOpposite()) > 0) { providedPacks.add
|
||||
* (electrical.provideElectricity(direction.getOpposite(), request, true)); } } } }
|
||||
*
|
||||
* ElectricityPack mergedPack = ElectricityPack.merge(providedPacks);
|
||||
*
|
||||
* if (mergedPack.getWatts() > 0) { this.getNetwork().produce(mergedPack,
|
||||
* tileEntities.toArray(new TileEntity[0])); } }
|
||||
*/
|
||||
}
|
||||
|
||||
public static EnumSet<ForgeDirection> getDirections(TileEntity tileEntity)
|
||||
{
|
||||
EnumSet<ForgeDirection> possibleSides = EnumSet.noneOf(ForgeDirection.class);
|
||||
|
|
|
@ -42,14 +42,20 @@ public class ElectricityNetwork implements IElectricityNetwork
|
|||
|
||||
private final Set<IConductor> conductors = new HashSet<IConductor>();
|
||||
|
||||
public float acceptorResistance = 500;
|
||||
|
||||
@Override
|
||||
public float produce(ElectricityPack electricity, TileEntity... ignoreTiles)
|
||||
{
|
||||
ElectricityProductionEvent evt = new ElectricityProductionEvent(electricity, ignoreTiles);
|
||||
ElectricityProductionEvent evt = new ElectricityProductionEvent(this, electricity, ignoreTiles);
|
||||
MinecraftForge.EVENT_BUS.post(evt);
|
||||
|
||||
float energy = electricity.getWatts();
|
||||
float totalEnergy = energy;
|
||||
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())
|
||||
|
@ -72,19 +78,13 @@ public class ElectricityNetwork implements IElectricityNetwork
|
|||
{
|
||||
if (electricalTile.canConnect(direction) && this.getConductors().contains(VectorHelper.getConnectorFromSide(tileEntity.worldObj, new Vector3(tileEntity), direction)))
|
||||
{
|
||||
float energyToSend = totalEnergy * (electricalTile.getRequest(direction) / totalEnergyRequest);
|
||||
float energyToSend = totalUsableEnergy * (electricalTile.getRequest(direction) / totalEnergyRequest);
|
||||
|
||||
if (energyToSend > 0)
|
||||
{
|
||||
ElectricityPack electricityToSend = ElectricityPack.getFromWatts(energyToSend, voltage);
|
||||
|
||||
// Calculate energy loss caused by resistance.
|
||||
float ampsReceived = electricityToSend.amperes - (electricityToSend.amperes * electricityToSend.amperes * this.getTotalResistance()) / electricityToSend.voltage;
|
||||
float voltsReceived = electricityToSend.voltage - (electricityToSend.amperes * this.getTotalResistance());
|
||||
|
||||
electricityToSend = new ElectricityPack(ampsReceived, voltsReceived);
|
||||
|
||||
energy -= ((IElectrical) tileEntity).receiveElectricity(direction, electricityToSend, true);
|
||||
remainingUsableEnergy -= ((IElectrical) tileEntity).receiveElectricity(direction, electricityToSend, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -94,7 +94,7 @@ public class ElectricityNetwork implements IElectricityNetwork
|
|||
}
|
||||
}
|
||||
|
||||
return energy;
|
||||
return remainingUsableEnergy;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -136,7 +136,7 @@ public class ElectricityNetwork implements IElectricityNetwork
|
|||
}
|
||||
|
||||
ElectricityPack mergedPack = ElectricityPack.merge(requests);
|
||||
ElectricityRequestEvent evt = new ElectricityRequestEvent(mergedPack, ignoreTiles);
|
||||
ElectricityRequestEvent evt = new ElectricityRequestEvent(this, mergedPack, ignoreTiles);
|
||||
MinecraftForge.EVENT_BUS.post(evt);
|
||||
return mergedPack;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue