Fixed inconsistant Tesla electric bolt

This commit is contained in:
Calclavia 2013-09-13 18:20:33 +08:00
parent 20e864b1e0
commit 7ec588d529

View file

@ -45,11 +45,13 @@ public class TileEntityTesla extends TileEntityUniversalElectrical implements IT
public final static int DEFAULT_COLOR = 12; public final static int DEFAULT_COLOR = 12;
public final float TRANSFER_CAP = 10; public final float TRANSFER_CAP = 10;
private int dyeID = DEFAULT_COLOR; private int dyeID = DEFAULT_COLOR;
private boolean doTransfer = true;
private boolean canReceive = true; private boolean canReceive = true;
private boolean attackEntities = true; private boolean attackEntities = true;
/** Client side to do sparks */
private boolean doTransfer = true;
/** Prevents transfer loops */ /** Prevents transfer loops */
private final Set<TileEntityTesla> outputBlacklist = new HashSet<TileEntityTesla>(); private final Set<TileEntityTesla> outputBlacklist = new HashSet<TileEntityTesla>();
private final Set<TileEntityTesla> connectedTeslas = new HashSet<TileEntityTesla>(); private final Set<TileEntityTesla> connectedTeslas = new HashSet<TileEntityTesla>();
@ -93,7 +95,7 @@ public class TileEntityTesla extends TileEntityUniversalElectrical implements IT
{ {
this.produce(); this.produce();
if (this.doTransfer && this.ticks % (5 + this.worldObj.rand.nextInt(2)) == 0 && this.getEnergyStored() > 0 && !this.worldObj.isBlockIndirectlyGettingPowered(this.xCoord, this.yCoord, this.zCoord)) if (this.ticks % (5 + this.worldObj.rand.nextInt(2)) == 0 && ((this.worldObj.isRemote && this.doTransfer) || (this.getEnergyStored() > 0 && !this.worldObj.isBlockIndirectlyGettingPowered(this.xCoord, this.yCoord, this.zCoord))))
{ {
final TileEntityTesla topTesla = this.getTopTelsa(); final TileEntityTesla topTesla = this.getTopTelsa();
final Vector3 topTeslaVector = new Vector3(topTesla); final Vector3 topTeslaVector = new Vector3(topTesla);
@ -189,7 +191,7 @@ public class TileEntityTesla extends TileEntityUniversalElectrical implements IT
{ {
float transferEnergy = this.getEnergyStored() / transferTeslaCoils.size(); float transferEnergy = this.getEnergyStored() / transferTeslaCoils.size();
int count = 0; int count = 0;
boolean sentPacket = false;
for (ITesla tesla : transferTeslaCoils) for (ITesla tesla : transferTeslaCoils)
{ {
if (this.zapCounter % 5 == 0 && ResonantInduction.SOUND_FXS) if (this.zapCounter % 5 == 0 && ResonantInduction.SOUND_FXS)
@ -210,6 +212,11 @@ public class TileEntityTesla extends TileEntityUniversalElectrical implements IT
this.transfer(tesla, Math.min(transferEnergy, TRANSFER_CAP)); this.transfer(tesla, Math.min(transferEnergy, TRANSFER_CAP));
if (!sentPacket)
{
this.sendPacket(3);
}
if (this.attackEntities && this.zapCounter % 5 == 0) if (this.attackEntities && this.zapCounter % 5 == 0)
{ {
MovingObjectPosition mop = topTeslaVector.clone().translate(0.5).rayTraceEntities(this.worldObj, targetVector.clone().translate(0.5)); MovingObjectPosition mop = topTeslaVector.clone().translate(0.5).rayTraceEntities(this.worldObj, targetVector.clone().translate(0.5));
@ -234,11 +241,13 @@ public class TileEntityTesla extends TileEntityUniversalElectrical implements IT
this.zapCounter++; this.zapCounter++;
this.outputBlacklist.clear(); this.outputBlacklist.clear();
this.doTransfer = false;
} }
if (!this.worldObj.isRemote && this.getEnergyStored() > 0 != doPacketUpdate) if (!this.worldObj.isRemote && this.getEnergyStored() > 0 != doPacketUpdate)
{ {
this.setPacket(2); this.sendPacket(2);
} }
} }
@ -257,7 +266,6 @@ public class TileEntityTesla extends TileEntityUniversalElectrical implements IT
@Override @Override
public float receiveElectricity(ElectricityPack receive, boolean doReceive) public float receiveElectricity(ElectricityPack receive, boolean doReceive)
{ {
this.doTransfer = true;
return super.receiveElectricity(receive, doReceive); return super.receiveElectricity(receive, doReceive);
} }
@ -284,7 +292,15 @@ public class TileEntityTesla extends TileEntityUniversalElectrical implements IT
return PacketHandler.getTileEntityPacket(this, (byte) 2, this.getEnergyStored()); return PacketHandler.getTileEntityPacket(this, (byte) 2, this.getEnergyStored());
} }
public void setPacket(int id) /**
* Do Tesla Beam.
*/
public Packet getDescriptionPacket3()
{
return PacketHandler.getTileEntityPacket(this, (byte) 3);
}
public void sendPacket(int id)
{ {
switch (id) switch (id)
{ {
@ -294,6 +310,9 @@ public class TileEntityTesla extends TileEntityUniversalElectrical implements IT
case 2: case 2:
PacketDispatcher.sendPacketToAllInDimension(this.getDescriptionPacket2(), this.worldObj.provider.dimensionId); PacketDispatcher.sendPacketToAllInDimension(this.getDescriptionPacket2(), this.worldObj.provider.dimensionId);
break; break;
case 3:
PacketDispatcher.sendPacketToAllInDimension(this.getDescriptionPacket3(), this.worldObj.provider.dimensionId);
break;
} }
} }
@ -320,10 +339,9 @@ public class TileEntityTesla extends TileEntityUniversalElectrical implements IT
case 2: case 2:
this.setEnergyStored(input.readFloat()); this.setEnergyStored(input.readFloat());
break; break;
case 3:
this.doTransfer = true;
} }
this.doTransfer = true;
} }
catch (Exception e) catch (Exception e)
{ {
@ -352,8 +370,7 @@ public class TileEntityTesla extends TileEntityUniversalElectrical implements IT
this.receiveElectricity(transferEnergy, true); this.receiveElectricity(transferEnergy, true);
} }
this.doTransfer = true; this.sendPacket(2);
this.setPacket(2);
return transferEnergy; return transferEnergy;
} }
else else