2012-12-23 11:28:26 +01:00
|
|
|
package dark.BasicUtilities.Tile;
|
2012-11-14 19:16:22 +01:00
|
|
|
|
2012-12-22 10:44:17 +01:00
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
|
|
import net.minecraft.network.INetworkManager;
|
|
|
|
import net.minecraft.network.packet.Packet;
|
|
|
|
import net.minecraft.network.packet.Packet250CustomPayload;
|
|
|
|
import net.minecraft.tileentity.TileEntity;
|
2012-11-14 19:16:22 +01:00
|
|
|
import net.minecraftforge.common.ForgeDirection;
|
2012-12-02 06:30:56 +01:00
|
|
|
import universalelectricity.core.vector.Vector3;
|
2012-11-14 19:16:22 +01:00
|
|
|
import universalelectricity.prefab.network.IPacketReceiver;
|
|
|
|
import universalelectricity.prefab.network.PacketManager;
|
|
|
|
|
|
|
|
import com.google.common.io.ByteArrayDataInput;
|
|
|
|
|
|
|
|
import dark.BasicUtilities.BasicUtilitiesMain;
|
2012-12-02 06:30:56 +01:00
|
|
|
import dark.BasicUtilities.api.IForce;
|
2012-12-07 19:09:27 +01:00
|
|
|
import dark.BasicUtilities.api.IReadOut;
|
2012-11-14 19:16:22 +01:00
|
|
|
|
2012-12-07 19:09:27 +01:00
|
|
|
public class TileEntityRod extends TileEntity implements IPacketReceiver, IForce, IReadOut
|
|
|
|
{
|
|
|
|
|
|
|
|
public int pos = 0;
|
|
|
|
private int force = 0;
|
|
|
|
private int pForce = 0;
|
|
|
|
public int aForce = 0;
|
|
|
|
public int forceMax = 1000;
|
|
|
|
private int tickCount = 0;
|
|
|
|
private int posCount = 0;
|
|
|
|
|
|
|
|
private ForgeDirection frontDir;
|
|
|
|
private ForgeDirection backDir;
|
|
|
|
|
|
|
|
private TileEntity bb;
|
|
|
|
private TileEntity ff;
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void updateEntity()
|
|
|
|
{
|
|
|
|
super.updateEntity();
|
|
|
|
if (tickCount++ >= 10)
|
|
|
|
{
|
|
|
|
tickCount = 0;
|
|
|
|
int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord);
|
|
|
|
frontDir = ForgeDirection.getOrientation(meta);
|
|
|
|
backDir = ForgeDirection.getOrientation(meta).getOpposite();
|
|
|
|
bb = worldObj.getBlockTileEntity(xCoord + backDir.offsetX, yCoord, zCoord + backDir.offsetZ);
|
|
|
|
ff = worldObj.getBlockTileEntity(xCoord + frontDir.offsetX, yCoord, zCoord + frontDir.offsetZ);
|
|
|
|
if (force > 0)
|
|
|
|
{
|
|
|
|
int posCountA = (forceMax / force) & 10;
|
|
|
|
if (posCount++ >= posCountA)
|
|
|
|
{
|
|
|
|
pos++;
|
|
|
|
if (pos > 7)
|
|
|
|
{
|
|
|
|
pos = 0;
|
|
|
|
}
|
|
|
|
;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (bb instanceof TileEntityRod)
|
|
|
|
{
|
|
|
|
this.pos = ((IForce) bb).getAnimationPos();
|
|
|
|
}
|
|
|
|
if (!worldObj.isRemote)
|
|
|
|
{
|
|
|
|
|
|
|
|
if (ff instanceof IForce)
|
|
|
|
{
|
|
|
|
if (((IForce) ff).canInputSide(backDir))
|
|
|
|
{
|
|
|
|
((IForce) ff).applyForce(aForce);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (bb instanceof IForce)
|
|
|
|
{
|
|
|
|
if (((IForce) bb).canOutputSide(frontDir))
|
|
|
|
{
|
|
|
|
this.force = ((IForce) bb).getForce();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
this.force -= Math.max(force / 10, 0);
|
|
|
|
}
|
|
|
|
aForce = Math.max(force - 10, 0);
|
|
|
|
if (this.force != this.pForce)
|
|
|
|
{
|
|
|
|
Packet packet = PacketManager.getPacket(BasicUtilitiesMain.CHANNEL, this, new Object[]
|
|
|
|
{ force });
|
2012-12-23 13:27:58 +01:00
|
|
|
PacketManager.sendPacketToClients(packet, worldObj, new Vector3(this), 40);
|
2012-12-07 19:09:27 +01:00
|
|
|
}
|
|
|
|
this.pForce = this.force;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getForceSide(ForgeDirection side)
|
|
|
|
{
|
|
|
|
return aForce;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canOutputSide(ForgeDirection side)
|
|
|
|
{
|
|
|
|
if (side == frontDir) { return true; }
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canInputSide(ForgeDirection side)
|
|
|
|
{
|
|
|
|
if (side == backDir) { return true; }
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int applyForce(int force)
|
|
|
|
{
|
|
|
|
this.force = force;
|
|
|
|
return force;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void handlePacketData(INetworkManager network, int packetType,
|
|
|
|
Packet250CustomPayload packet, EntityPlayer player,
|
|
|
|
ByteArrayDataInput data)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
this.force = data.readInt();
|
|
|
|
}
|
|
|
|
catch (Exception e)
|
|
|
|
{
|
|
|
|
e.printStackTrace();
|
|
|
|
System.out.print("MechRodDataFailure \n");
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getAnimationPos()
|
|
|
|
{
|
|
|
|
return this.pos;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getForce()
|
|
|
|
{
|
|
|
|
// TODO Auto-generated method stub
|
|
|
|
return this.force;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getMeterReading(EntityPlayer user, ForgeDirection side)
|
|
|
|
{
|
|
|
|
return this.aForce + "N Out " + this.force + "N In";
|
|
|
|
}
|
2012-11-14 19:16:22 +01:00
|
|
|
}
|