Made transfer rate per connection
This commit is contained in:
parent
cc541bd55c
commit
23428d3223
1 changed files with 25 additions and 49 deletions
|
@ -53,6 +53,7 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage,
|
||||||
private int transferRate = 0;
|
private int transferRate = 0;
|
||||||
private EnumCableType cableType = null;
|
private EnumCableType cableType = null;
|
||||||
private ArrayList<EnumFacing> sendingFace = new ArrayList<EnumFacing>();
|
private ArrayList<EnumFacing> sendingFace = new ArrayList<EnumFacing>();
|
||||||
|
int ticksSinceLastChange = 0;
|
||||||
|
|
||||||
private EnumCableType getCableType() {
|
private EnumCableType getCableType() {
|
||||||
return world.getBlockState(pos).getValue(BlockCable.TYPE);
|
return world.getBlockState(pos).getValue(BlockCable.TYPE);
|
||||||
|
@ -62,7 +63,7 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage,
|
||||||
if (sendingFace.contains(face)) {
|
if (sendingFace.contains(face)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return canReceive();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TileEntity
|
// TileEntity
|
||||||
|
@ -74,7 +75,6 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage,
|
||||||
return super.hasCapability(capability, facing);
|
return super.hasCapability(capability, facing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
|
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
|
||||||
if (capability == CapabilityEnergy.ENERGY) {
|
if (capability == CapabilityEnergy.ENERGY) {
|
||||||
|
@ -85,19 +85,11 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage,
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NBTTagCompound getUpdateTag() {
|
public NBTTagCompound getUpdateTag() {
|
||||||
// getUpdateTag() is called whenever the chunkdata is sent to the
|
|
||||||
// client. In contrast getUpdatePacket() is called when the tile entity
|
|
||||||
// itself wants to sync to the client. In many cases you want to send
|
|
||||||
// over the same information in getUpdateTag() as in getUpdatePacket().
|
|
||||||
return writeToNBT(new NBTTagCompound());
|
return writeToNBT(new NBTTagCompound());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SPacketUpdateTileEntity getUpdatePacket() {
|
public SPacketUpdateTileEntity getUpdatePacket() {
|
||||||
// Prepare a packet for syncing our TE to the client. Since we only have to sync the stack
|
|
||||||
// and that's all we have we just write our entire NBT here. If you have a complex
|
|
||||||
// tile entity that doesn't need to have all information on the client you can write
|
|
||||||
// a more optimal NBT here.
|
|
||||||
NBTTagCompound nbtTag = new NBTTagCompound();
|
NBTTagCompound nbtTag = new NBTTagCompound();
|
||||||
this.writeToNBT(nbtTag);
|
this.writeToNBT(nbtTag);
|
||||||
return new SPacketUpdateTileEntity(getPos(), 1, nbtTag);
|
return new SPacketUpdateTileEntity(getPos(), 1, nbtTag);
|
||||||
|
@ -105,7 +97,6 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage,
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity packet) {
|
public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity packet) {
|
||||||
// Here we get the packet from the server and read it into our client side tile entity
|
|
||||||
this.readFromNBT(packet.getNbtCompound());
|
this.readFromNBT(packet.getNbtCompound());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,10 +131,17 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage,
|
||||||
this.transferRate = this.cableType.transferRate * RebornCoreConfig.euPerFU;
|
this.transferRate = this.cableType.transferRate * RebornCoreConfig.euPerFU;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList<IEnergyStorage> acceptors = new ArrayList<IEnergyStorage>();
|
ticksSinceLastChange++;
|
||||||
ArrayList<TileCable> cables = new ArrayList<TileCable>();
|
if (ticksSinceLastChange >= 10) {
|
||||||
sendingFace.clear();
|
sendingFace.clear();
|
||||||
|
ticksSinceLastChange = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!canExtract()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayList<IEnergyStorage> acceptors = new ArrayList<IEnergyStorage>();
|
||||||
for (EnumFacing face : EnumFacing.VALUES) {
|
for (EnumFacing face : EnumFacing.VALUES) {
|
||||||
TileEntity tile = world.getTileEntity(pos.offset(face));
|
TileEntity tile = world.getTileEntity(pos.offset(face));
|
||||||
|
|
||||||
|
@ -152,9 +150,11 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage,
|
||||||
} else if (tile instanceof TileCable) {
|
} else if (tile instanceof TileCable) {
|
||||||
TileCable cable = (TileCable) tile;
|
TileCable cable = (TileCable) tile;
|
||||||
if (power > cable.power && cable.canReceiveFromFace(face.getOpposite())) {
|
if (power > cable.power && cable.canReceiveFromFace(face.getOpposite())) {
|
||||||
cables.add(cable);
|
acceptors.add((IEnergyStorage) tile);
|
||||||
|
if (!sendingFace.contains(face)) {
|
||||||
sendingFace.add(face);
|
sendingFace.add(face);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else if (tile.hasCapability(CapabilityEnergy.ENERGY, face.getOpposite())) {
|
} else if (tile.hasCapability(CapabilityEnergy.ENERGY, face.getOpposite())) {
|
||||||
IEnergyStorage energyTile = tile.getCapability(CapabilityEnergy.ENERGY, face.getOpposite());
|
IEnergyStorage energyTile = tile.getCapability(CapabilityEnergy.ENERGY, face.getOpposite());
|
||||||
if (energyTile != null && energyTile.canReceive()) {
|
if (energyTile != null && energyTile.canReceive()) {
|
||||||
|
@ -163,38 +163,14 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cables.size() > 0){
|
|
||||||
int drain = Math.min(power, transferRate);
|
|
||||||
int energyShare = drain / cables.size();
|
|
||||||
int remainingEnergy = drain;
|
|
||||||
|
|
||||||
if (energyShare > 0) {
|
|
||||||
for (TileCable cable : cables) {
|
|
||||||
// Push energy to connected cables
|
|
||||||
int move = cable.receiveEnergy(Math.min(energyShare, remainingEnergy), false);
|
|
||||||
if (move > 0) {
|
|
||||||
remainingEnergy -= move;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
extractEnergy(drain - remainingEnergy, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (acceptors.size() > 0 ) {
|
if (acceptors.size() > 0 ) {
|
||||||
int drain = Math.min(power, transferRate);
|
|
||||||
int energyShare = drain / acceptors.size();
|
|
||||||
int remainingEnergy = drain;
|
|
||||||
|
|
||||||
if (energyShare > 0) {
|
|
||||||
for (IEnergyStorage tile : acceptors) {
|
for (IEnergyStorage tile : acceptors) {
|
||||||
// Push energy to connected tile acceptors
|
int drain = Math.min(power, transferRate);
|
||||||
int move = tile.receiveEnergy(Math.min(energyShare, remainingEnergy), false);
|
if (drain > 0 && tile.receiveEnergy(drain, true) > 0) {
|
||||||
if (move > 0) {
|
int move = tile.receiveEnergy(drain, false);
|
||||||
remainingEnergy -= move;
|
extractEnergy(move, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
extractEnergy(drain - remainingEnergy, false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,7 +206,7 @@ public class TileCable extends TileEntity implements ITickable, IEnergyStorage,
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxEnergyStored() {
|
public int getMaxEnergyStored() {
|
||||||
return this.transferRate * 6;
|
return this.transferRate * 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Add table
Reference in a new issue