Program: 22469
Project: 22469
Buggy source:
@Override public void updateEntity(){
  if (lastSteam != this.getSteam() > steamUsage) {
    worldObj.markBlockForUpdate(xCoord,yCoord,zCoord);
  }
  lastSteam=this.getSteam() > steamUsage;
  if (!isInitialized) {
    ForgeDirection myDir=ForgeDirection.getOrientation(this.worldObj.getBlockMetadata(xCoord,yCoord,zCoord));
    ForgeDirection[] directions=new ForgeDirection[5];
    int i=0;
    for (    ForgeDirection direction : ForgeDirection.values()) {
      if (direction != myDir && direction != myDir.getOpposite()) {
        directions[i]=direction;
        i++;
      }
    }
    this.setDistributionDirections(directions);
    isInitialized=true;
  }
  super.updateEntity();
  if (active && this.worldObj.isRemote) {
    rotateTicks++;
  }
  if (active && this.worldObj.isRemote || (this.getSteam() > steamUsage && !this.powered)) {
    if (!this.worldObj.isRemote) {
      this.decrSteam(1);
    }
    int meta=this.worldObj.getBlockMetadata(xCoord,yCoord,zCoord);
    ForgeDirection dir=ForgeDirection.getOrientation(meta);
    float[] M={this.xCoord + 0.5F,this.yCoord + 0.5F,this.zCoord + 0.5F};
    float[] N={this.xCoord + 0.5F + 10 * dir.offsetX,this.yCoord + 0.5F + 10 * dir.offsetY,this.zCoord + 0.5F + 10 * dir.offsetZ};
    float theta=(float)Math.PI / 2.0F;
    List entities=worldObj.getEntitiesWithinAABB(Entity.class,AxisAlignedBB.getBoundingBox(xCoord - 20,yCoord - 20,zCoord - 20,xCoord + 20,yCoord + 20,zCoord + 20));
    for (int i=0; i < 200; i++) {
      float[] X={(worldObj.rand.nextFloat() * 40.0F) - 20.0F + xCoord,(worldObj.rand.nextFloat() * 40.0F) - 20.0F + yCoord,(worldObj.rand.nextFloat() * 40.0F) - 20.0F + zCoord};
      if (isLyingInCone(X,M,N,theta) && this.worldObj.rayTraceBlocks(Vec3.createVectorHelper(X[0],X[1],X[2]),Vec3.createVectorHelper(this.xCoord + 0.5F + dir.offsetX,this.yCoord + 0.5F + dir.offsetY,this.zCoord + 0.5F + dir.offsetZ)) == null) {
        Vec3 vec=Vec3.createVectorHelper(X[0] - M[0],X[1] - M[1],X[2] - M[2]);
        vec=vec.normalize();
        this.worldObj.spawnParticle("String_Node_Str",X[0],X[1],X[2],-vec.xCoord * 0.5F,-vec.yCoord * 0.5F,-vec.zCoord * 0.5F);
      }
    }
    for (    Object obj : entities) {
      Entity entity=(Entity)obj;
      float[] X={(float)entity.posX,(float)entity.posY,(float)entity.posZ};
      if (isLyingInCone(X,M,N,theta) && this.worldObj.rayTraceBlocks(Vec3.createVectorHelper(entity.posX,entity.posY,entity.posZ),Vec3.createVectorHelper(this.xCoord + 0.5F + dir.offsetX,this.yCoord + 0.5F + dir.offsetY,this.zCoord + 0.5F + dir.offsetZ)) == null) {
        if (!(entity instanceof EntityPlayer) || !(((EntityPlayer)entity).capabilities.isFlying && ((EntityPlayer)entity).capabilities.isCreativeMode)) {
          Vec3 vec=Vec3.createVectorHelper(X[0] - M[0],X[1] - M[1],X[2] - M[2]);
          vec=vec.normalize();
          vec.yCoord*=1;
          if (entity.isSneaking()) {
            vec.xCoord*=0.25F;
            vec.yCoord*=0.25F;
            vec.zCoord*=0.25F;
          }
          entity.motionX-=vec.xCoord * 0.025F;
          entity.motionY-=vec.yCoord * 0.05F;
          entity.motionZ-=vec.zCoord * 0.025F;
          entity.fallDistance=0.0F;
        }
      }
    }
    List list=worldObj.selectEntitiesWithinAABB(EntityItem.class,AxisAlignedBB.getBoundingBox(xCoord + dir.offsetX * 0.25F,yCoord + dir.offsetY * 0.25F,zCoord + dir.offsetZ * 0.25F,xCoord + 1.0D + dir.offsetX * 0.25F,yCoord + 1.0D + dir.offsetY * 0.25F,zCoord + 1.0D + dir.offsetZ * 0.25F),IEntitySelector.selectAnything);
    if (list.size() > 0) {
      EntityItem item=(EntityItem)list.get(0);
      if (this.worldObj.getTileEntity(xCoord - dir.offsetX,yCoord - dir.offsetY,zCoord - dir.offsetZ) != null && this.worldObj.getTileEntity(xCoord - dir.offsetX,yCoord - dir.offsetY,zCoord - dir.offsetZ) instanceof ISidedInventory) {
        ISidedInventory inv=(ISidedInventory)this.worldObj.getTileEntity(xCoord - dir.offsetX,yCoord - dir.offsetY,zCoord - dir.offsetZ);
        int[] access=inv.getAccessibleSlotsFromSide(dir.getOpposite().flag);
        for (int j=0; j < access.length; j++) {
          int i=access[j];
          ItemStack checkStack1=null;
          ItemStack checkStack2=null;
          if (inv.getStackInSlot(i) != null) {
            checkStack1=inv.getStackInSlot(i).copy();
            checkStack1.stackSize=1;
            checkStack2=item.getEntityItem().copy();
            checkStack2.stackSize=1;
          }
          if ((inv.getStackInSlot(i) == null || (item.getEntityItem().areItemStacksEqual(checkStack1,checkStack2) && inv.getStackInSlot(i).stackSize < inv.getStackInSlot(i).getMaxStackSize())) && inv.isItemValidForSlot(i,item.getEntityItem()) && inv.canInsertItem(i,item.getEntityItem(),dir.getOpposite().flag)) {
            ItemStack stack=item.getEntityItem().copy();
            boolean setDead=true;
            if (inv.getStackInSlot(i) != null) {
              if ((inv.getStackInSlot(i).stackSize + stack.stackSize) > stack.getMaxStackSize()) {
                setDead=false;
                int total=inv.getStackInSlot(i).stackSize + stack.stackSize;
                stack.stackSize=stack.getMaxStackSize();
                total-=stack.getMaxStackSize();
                checkStack2.stackSize=total;
                item.setEntityItemStack(checkStack2);
              }
 else {
                stack.stackSize=inv.getStackInSlot(i).stackSize + item.getEntityItem().stackSize;
              }
            }
            inv.setInventorySlotContents(i,stack);
            if (setDead) {
              item.setDead();
            }
            break;
          }
        }
      }
 else       if (this.worldObj.getTileEntity(xCoord - dir.offsetX,yCoord - dir.offsetY,zCoord - dir.offsetZ) != null && this.worldObj.getTileEntity(xCoord - dir.offsetX,yCoord - dir.offsetY,zCoord - dir.offsetZ) instanceof IInventory) {
        IInventory inv=(IInventory)this.worldObj.getTileEntity(xCoord - dir.offsetX,yCoord - dir.offsetY,zCoord - dir.offsetZ);
        for (int i=0; i < inv.getSizeInventory(); i++) {
          ItemStack checkStack1=null;
          ItemStack checkStack2=null;
          if (inv.getStackInSlot(i) != null) {
            checkStack1=inv.getStackInSlot(i).copy();
            checkStack1.stackSize=1;
            checkStack2=item.getEntityItem().copy();
            checkStack2.stackSize=1;
          }
          if ((inv.getStackInSlot(i) == null || (item.getEntityItem().areItemStacksEqual(checkStack1,checkStack2) && inv.getStackInSlot(i).stackSize < inv.getStackInSlot(i).getMaxStackSize())) && inv.isItemValidForSlot(i,item.getEntityItem())) {
            ItemStack stack=item.getEntityItem().copy();
            boolean setDead=true;
            if (inv.getStackInSlot(i) != null) {
              if ((inv.getStackInSlot(i).stackSize + stack.stackSize) > stack.getMaxStackSize()) {
                setDead=false;
                int total=inv.getStackInSlot(i).stackSize + stack.stackSize;
                stack.stackSize=stack.getMaxStackSize();
                total-=stack.getMaxStackSize();
                checkStack2.stackSize=total;
                item.setEntityItemStack(checkStack2);
              }
 else {
                stack.stackSize=inv.getStackInSlot(i).stackSize + item.getEntityItem().stackSize;
              }
            }
            inv.setInventorySlotContents(i,stack);
            if (setDead) {
              item.setDead();
            }
            break;
          }
        }
      }
    }
  }
}

Fixed version (ground truth):
@Override public void updateEntity(){
  if (lastSteam != this.getSteam() > steamUsage) {
    worldObj.markBlockForUpdate(xCoord,yCoord,zCoord);
  }
  lastSteam=this.getSteam() > steamUsage;
  if (!isInitialized) {
    this.powered=worldObj.isBlockIndirectlyGettingPowered(xCoord,yCoord,zCoord);
    ForgeDirection myDir=ForgeDirection.getOrientation(this.worldObj.getBlockMetadata(xCoord,yCoord,zCoord));
    ForgeDirection[] directions=new ForgeDirection[5];
    int i=0;
    for (    ForgeDirection direction : ForgeDirection.values()) {
      if (direction != myDir && direction != myDir.getOpposite()) {
        directions[i]=direction;
        i++;
      }
    }
    this.setDistributionDirections(directions);
    isInitialized=true;
  }
  super.updateEntity();
  if (active && this.worldObj.isRemote) {
    rotateTicks++;
  }
  if (active && this.worldObj.isRemote || (this.getSteam() > steamUsage && !this.powered)) {
    if (!this.worldObj.isRemote) {
      this.decrSteam(3);
    }
    int meta=this.worldObj.getBlockMetadata(xCoord,yCoord,zCoord);
    ForgeDirection dir=ForgeDirection.getOrientation(meta);
    float[] M={this.xCoord + 0.5F,this.yCoord + 0.5F,this.zCoord + 0.5F};
    float[] N={this.xCoord + 0.5F + 10 * dir.offsetX,this.yCoord + 0.5F + 10 * dir.offsetY,this.zCoord + 0.5F + 10 * dir.offsetZ};
    float theta=(float)Math.PI / 2.0F;
    List entities=worldObj.getEntitiesWithinAABB(Entity.class,AxisAlignedBB.getBoundingBox(xCoord - 20,yCoord - 20,zCoord - 20,xCoord + 20,yCoord + 20,zCoord + 20));
    for (int i=0; i < 200; i++) {
      float[] X={(worldObj.rand.nextFloat() * 40.0F) - 20.0F + xCoord,(worldObj.rand.nextFloat() * 40.0F) - 20.0F + yCoord,(worldObj.rand.nextFloat() * 40.0F) - 20.0F + zCoord};
      if (isLyingInCone(X,M,N,theta) && this.worldObj.rayTraceBlocks(Vec3.createVectorHelper(X[0],X[1],X[2]),Vec3.createVectorHelper(this.xCoord + 0.5F + dir.offsetX,this.yCoord + 0.5F + dir.offsetY,this.zCoord + 0.5F + dir.offsetZ)) == null) {
        Vec3 vec=Vec3.createVectorHelper(X[0] - M[0],X[1] - M[1],X[2] - M[2]);
        vec=vec.normalize();
        this.worldObj.spawnParticle("String_Node_Str",X[0],X[1],X[2],-vec.xCoord * 0.5F,-vec.yCoord * 0.5F,-vec.zCoord * 0.5F);
      }
    }
    for (    Object obj : entities) {
      Entity entity=(Entity)obj;
      float[] X={(float)entity.posX,(float)entity.posY,(float)entity.posZ};
      if (isLyingInCone(X,M,N,theta) && this.worldObj.rayTraceBlocks(Vec3.createVectorHelper(entity.posX,entity.posY,entity.posZ),Vec3.createVectorHelper(this.xCoord + 0.5F + dir.offsetX,this.yCoord + 0.5F + dir.offsetY,this.zCoord + 0.5F + dir.offsetZ)) == null) {
        if (!(entity instanceof EntityPlayer) || !(((EntityPlayer)entity).capabilities.isFlying && ((EntityPlayer)entity).capabilities.isCreativeMode)) {
          Vec3 vec=Vec3.createVectorHelper(X[0] - M[0],X[1] - M[1],X[2] - M[2]);
          vec=vec.normalize();
          vec.yCoord*=1;
          if (entity.isSneaking()) {
            vec.xCoord*=0.25F;
            vec.yCoord*=0.25F;
            vec.zCoord*=0.25F;
          }
          entity.motionX-=vec.xCoord * 0.025F;
          entity.motionY-=vec.yCoord * 0.05F;
          entity.motionZ-=vec.zCoord * 0.025F;
          entity.fallDistance=0.0F;
        }
      }
    }
    List list=worldObj.selectEntitiesWithinAABB(EntityItem.class,AxisAlignedBB.getBoundingBox(xCoord + dir.offsetX * 0.25F,yCoord + dir.offsetY * 0.25F,zCoord + dir.offsetZ * 0.25F,xCoord + 1.0D + dir.offsetX * 0.25F,yCoord + 1.0D + dir.offsetY * 0.25F,zCoord + 1.0D + dir.offsetZ * 0.25F),IEntitySelector.selectAnything);
    if (list.size() > 0) {
      EntityItem item=(EntityItem)list.get(0);
      if (this.worldObj.getTileEntity(xCoord - dir.offsetX,yCoord - dir.offsetY,zCoord - dir.offsetZ) != null && this.worldObj.getTileEntity(xCoord - dir.offsetX,yCoord - dir.offsetY,zCoord - dir.offsetZ) instanceof ISidedInventory) {
        ISidedInventory inv=(ISidedInventory)this.worldObj.getTileEntity(xCoord - dir.offsetX,yCoord - dir.offsetY,zCoord - dir.offsetZ);
        int[] access=inv.getAccessibleSlotsFromSide(dir.getOpposite().flag);
        for (int j=0; j < access.length; j++) {
          int i=access[j];
          ItemStack checkStack1=null;
          ItemStack checkStack2=null;
          if (inv.getStackInSlot(i) != null) {
            checkStack1=inv.getStackInSlot(i).copy();
            checkStack1.stackSize=1;
            checkStack2=item.getEntityItem().copy();
            checkStack2.stackSize=1;
          }
          if ((inv.getStackInSlot(i) == null || (item.getEntityItem().areItemStacksEqual(checkStack1,checkStack2) && inv.getStackInSlot(i).stackSize < inv.getStackInSlot(i).getMaxStackSize())) && inv.isItemValidForSlot(i,item.getEntityItem()) && inv.canInsertItem(i,item.getEntityItem(),dir.getOpposite().flag)) {
            ItemStack stack=item.getEntityItem().copy();
            boolean setDead=true;
            if (inv.getStackInSlot(i) != null) {
              if ((inv.getStackInSlot(i).stackSize + stack.stackSize) > stack.getMaxStackSize()) {
                setDead=false;
                int total=inv.getStackInSlot(i).stackSize + stack.stackSize;
                stack.stackSize=stack.getMaxStackSize();
                total-=stack.getMaxStackSize();
                checkStack2.stackSize=total;
                item.setEntityItemStack(checkStack2);
              }
 else {
                stack.stackSize=inv.getStackInSlot(i).stackSize + item.getEntityItem().stackSize;
              }
            }
            inv.setInventorySlotContents(i,stack);
            if (setDead) {
              item.setDead();
            }
            break;
          }
        }
      }
 else       if (this.worldObj.getTileEntity(xCoord - dir.offsetX,yCoord - dir.offsetY,zCoord - dir.offsetZ) != null && this.worldObj.getTileEntity(xCoord - dir.offsetX,yCoord - dir.offsetY,zCoord - dir.offsetZ) instanceof IInventory) {
        IInventory inv=(IInventory)this.worldObj.getTileEntity(xCoord - dir.offsetX,yCoord - dir.offsetY,zCoord - dir.offsetZ);
        for (int i=0; i < inv.getSizeInventory(); i++) {
          ItemStack checkStack1=null;
          ItemStack checkStack2=null;
          if (inv.getStackInSlot(i) != null) {
            checkStack1=inv.getStackInSlot(i).copy();
            checkStack1.stackSize=1;
            checkStack2=item.getEntityItem().copy();
            checkStack2.stackSize=1;
          }
          if ((inv.getStackInSlot(i) == null || (item.getEntityItem().areItemStacksEqual(checkStack1,checkStack2) && inv.getStackInSlot(i).stackSize < inv.getStackInSlot(i).getMaxStackSize())) && inv.isItemValidForSlot(i,item.getEntityItem())) {
            ItemStack stack=item.getEntityItem().copy();
            boolean setDead=true;
            if (inv.getStackInSlot(i) != null) {
              if ((inv.getStackInSlot(i).stackSize + stack.stackSize) > stack.getMaxStackSize()) {
                setDead=false;
                int total=inv.getStackInSlot(i).stackSize + stack.stackSize;
                stack.stackSize=stack.getMaxStackSize();
                total-=stack.getMaxStackSize();
                checkStack2.stackSize=total;
                item.setEntityItemStack(checkStack2);
              }
 else {
                stack.stackSize=inv.getStackInSlot(i).stackSize + item.getEntityItem().stackSize;
              }
            }
            inv.setInventorySlotContents(i,stack);
            if (setDead) {
              item.setDead();
            }
            break;
          }
        }
      }
    }
  }
}