Program: 131021
Project: 131021
Buggy source:
public EntityShip getEntity(World world){
  if (!isOK())   return null;
  EntityShip entity=new EntityShip(world);
  entity.setPilotSeat(shipMarkingBlock.blockMeta & 3,shipMarkingBlock.coords.chunkPosX - xOffset,shipMarkingBlock.coords.chunkPosY - yOffset,shipMarkingBlock.coords.chunkPosZ - zOffset);
  entity.getShipChunk().setCreationSpotBiomeGen(world.getBiomeGenForCoords(shipMarkingBlock.coords.chunkPosX,shipMarkingBlock.coords.chunkPosZ));
  boolean flag=world.getGameRules().getGameRuleBooleanValue("String_Node_Str");
  world.getGameRules().setOrCreateGameRule("String_Node_Str","String_Node_Str");
  try {
    TileEntity tileentity;
    int ix, iy, iz;
    for (    LocatedBlock lb : assembledBlocks) {
      ix=lb.coords.chunkPosX - xOffset;
      iy=lb.coords.chunkPosY - yOffset;
      iz=lb.coords.chunkPosZ - zOffset;
      tileentity=lb.tileEntity;
      if (tileentity != null || lb.block.hasTileEntity(lb.blockMeta) && (tileentity=world.getTileEntity(lb.coords.chunkPosX,lb.coords.chunkPosY,lb.coords.chunkPosZ)) != null) {
        world.removeTileEntity(lb.coords.chunkPosX,lb.coords.chunkPosY,lb.coords.chunkPosZ);
        tileentity.validate();
        tileentity.updateContainingBlockInfo();
        tileentity.blockType=lb.block;
        tileentity.blockMetadata=lb.blockMeta;
      }
      if (entity.getShipChunk().setBlockIDWithMetadata(ix,iy,iz,lb.block,lb.blockMeta)) {
        entity.getShipChunk().setTileEntity(ix,iy,iz,tileentity);
        world.setBlock(lb.coords.chunkPosX,lb.coords.chunkPosY,lb.coords.chunkPosZ,Blocks.air,1,2);
      }
    }
    for (    LocatedBlock block : assembledBlocks) {
      world.setBlockToAir(block.coords.chunkPosX,block.coords.chunkPosY,block.coords.chunkPosZ);
    }
  }
 catch (  Exception e) {
    resultCode=RESULT_ERROR_OCCURED;
    e.printStackTrace();
    return null;
  }
 finally {
    world.getGameRules().setOrCreateGameRule("String_Node_Str",String.valueOf(flag));
  }
  entity.getShipChunk().setChunkModified();
  entity.getShipChunk().onChunkLoad();
  entity.setLocationAndAngles(xOffset + entity.getShipChunk().getCenterX(),yOffset,zOffset + entity.getShipChunk().getCenterZ(),0F,0F);
  return entity;
}

Fixed version (ground truth):
public EntityShip getEntity(World world){
  if (!isOK())   return null;
  EntityShip entity=new EntityShip(world);
  entity.setPilotSeat(shipMarkingBlock.blockMeta & 3,shipMarkingBlock.coords.chunkPosX - xOffset,shipMarkingBlock.coords.chunkPosY - yOffset,shipMarkingBlock.coords.chunkPosZ - zOffset);
  entity.getShipChunk().setCreationSpotBiomeGen(world.getBiomeGenForCoords(shipMarkingBlock.coords.chunkPosX,shipMarkingBlock.coords.chunkPosZ));
  boolean flag=world.getGameRules().getGameRuleBooleanValue("String_Node_Str");
  world.getGameRules().setOrCreateGameRule("String_Node_Str","String_Node_Str");
  try {
    TileEntity tileentity;
    int ix, iy, iz;
    for (    LocatedBlock lb : assembledBlocks) {
      ix=lb.coords.chunkPosX - xOffset;
      iy=lb.coords.chunkPosY - yOffset;
      iz=lb.coords.chunkPosZ - zOffset;
      tileentity=lb.tileEntity;
      if (tileentity != null || lb.block.hasTileEntity(lb.blockMeta) && (tileentity=world.getTileEntity(lb.coords.chunkPosX,lb.coords.chunkPosY,lb.coords.chunkPosZ)) != null) {
        tileentity.validate();
      }
      if (entity.getShipChunk().setBlockIDWithMetadata(ix,iy,iz,lb.block,lb.blockMeta)) {
        entity.getShipChunk().setTileEntity(ix,iy,iz,tileentity);
        world.setBlock(lb.coords.chunkPosX,lb.coords.chunkPosY,lb.coords.chunkPosZ,Blocks.air,1,2);
      }
    }
    for (    LocatedBlock block : assembledBlocks) {
      world.setBlockToAir(block.coords.chunkPosX,block.coords.chunkPosY,block.coords.chunkPosZ);
    }
  }
 catch (  Exception e) {
    resultCode=RESULT_ERROR_OCCURED;
    e.printStackTrace();
    return null;
  }
 finally {
    world.getGameRules().setOrCreateGameRule("String_Node_Str",String.valueOf(flag));
  }
  entity.getShipChunk().setChunkModified();
  entity.getShipChunk().onChunkLoad();
  entity.setLocationAndAngles(xOffset + entity.getShipChunk().getCenterX(),yOffset,zOffset + entity.getShipChunk().getCenterZ(),0F,0F);
  return entity;
}